2017-11-13 12 views
1

デフォルトの長さを16 * 1024からより大きい値(128 * 1024)に変更するために、shutil.copyfileobj()関数をモンキーパッチにしようとしています。内部的には、moveのような他のシャットルメソッドはcopyfileobj()関数を呼び出しますが、私はこれらの呼び出しにも猿のパッチの影響を受けたいと思います。これは動作していないようです:Python Monkey Patch 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') 
関連する問題