我正在Ubuntu 16.04下的Python 3中为tempfile.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
为空。如果我在创建delete=False
时使用NamedTemporaryFile
,我可以在/tmp/
中检查其内容并且它们没问题。
我知道根据文档在Windows下打开时无法再次打开文件,但Linux应该没问题,所以我不希望它是那样。
发生了什么以及如何解决?
答案 0 :(得分:0)
问题是print()
调用没有被刷新,所以当复制文件时,还没有写入任何内容。
使用flush=True
作为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')