Python Monkey Patch shutil

时间:2017-11-13 04:22:37

标签: python monkeypatching

我正在尝试修补补丁shutil.copyfileobj()函数,以便将其默认长度从16 * 1024更改为更大的值(128 * 1024)。在内部,其他shutil方法(如move)调用copyfileobj()函数,我希望这些调用也受到猴子补丁的影响。这似乎不起作用:

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')

我希望这会打印“复制文件快”,但事实并非如此。有没有办法实现我想做的事情?

1 个答案:

答案 0 :(得分: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')