2017-11-13 17 views
1

기본 길이를 16 * 1024에서 더 큰 값 (128 * 1024)으로 변경하려면 shutil.copyfileobj() 함수를 원숭이 패치하려고합니다. 내부적으로 move와 같은 다른 shutil 메서드는 copyfileobj() 함수를 호출하며 원숭이 패치의 영향을 받기를 원합니다. 이 작동하지 않는 것 같습니다 :파이썬 원숭이 패치 shutil

import shutil 

shutil.copyfileobjOrig = shutil.copyfileobj 

def copyfileobjFast(fsrc, fdst, length=16*1024): 
    print('COPYING FILE FAST') 
    shutil.copyfileobjOrig(fsrc, fdst, length=128*1024) 

shutil.copyfileobj = copyfileobjFast 

shutil.move('test.txt', 'testmove.txt') 

"COPYING FILE FAST"를 인쇄 할 것으로 예상되지만 그렇지 않습니다. 내가하려는 일을 성취 할 수있는 방법이 있습니까?

+1

['shutil.move'은] (https://docs.python.org/3/library/shutil.html#shutil.move는) 만 수행 여기서 일을 원숭이 패치를 보여줍니다 업데이트 된 버전입니다 원본 및 대상 경로가 다른 파일 시스템에 있으면 복사하십시오. 다른 파일 시스템에 있습니까? – jwodder

+1

@jwodder, doh! 고마워, 그게 효과가있어. – user438629

답변

1

내 테스트 케이스가 고장났습니다. shutil.move()는 원본 파일과 대상 파일이 다른 장치에있는 경우에만 복사를 수행합니다.

import shutil 

shutil.copyfileobjOrig = shutil.copyfileobj 

def copyfileobjFast(fsrc, fdst, length=16*1024): 
    print('COPYING FILE FAST') 
    shutil.copyfileobjOrig(fsrc, fdst, length=128*1024) 

shutil.copyfileobj = copyfileobjFast 

shutil.move('/dev1/test.txt', '/dev2/testmove.txt')