2017-12-14 5 views
0

私はPython 3でUbuntu 16.04の下でtempfile.NamedTemporaryFileに内容を書いています。特定の状況下では、私は書かれた後に別の場所にそのファイルをコピーしたいと思います。問題は次のコードで再現されます。LinuxでNamedTemporaryFileをコピーすると、空のファイルになる

import tempfile 
import shutil 

with tempfile.NamedTemporaryFile('w+t') as tmp_file: 
    print('Hello, world', file=tmp_file) 
    shutil.copy2(tmp_file.name, 'mytest.txt') 

mytest.txtは実行が終了すると空です。 NamedTemporaryFileを作成するときにdelete=Falseを使用した場合、その内容は/tmp/で検査でき、問題はありません。

ドキュメントの通りWindowsで開いている間はファイルを開くことができないことは知っていますが、Linuxはうまくいくはずですので、そうは思わないでしょう。

何が起こっていますか?どのように解決できますか?

答えて

0

問題は、print()コールがフラッシュされないため、ファイルがコピーされてもまだ何も書き込まれていないことです。

import tempfile 
import shutil 

with tempfile.NamedTemporaryFile('w+t') as tmp_file: 
    print('Hello, world', file=tmp_file, flush=True) 
    shutil.copy2(tmp_file.name, 'mytest.txt') 
print()のパラメータとして flush=Trueを使用して

は、問題を修正します

関連する問題