我正在为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应该没问题,所以我不希望是这样。
发生了什么,怎么解决?
最佳答案
问题是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')