在Linux中复制NamedTemporaryFile会导致空文件

时间:2017-12-14 14:21:56

标签: python linux temp

我正在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应该没问题,所以我不希望它是那样。

发生了什么以及如何解决?

1 个答案:

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