【发布时间】:2013-02-16 15:00:23
【问题描述】:
我正在编写一个 Python 脚本,该脚本需要将一些数据写入临时文件,然后创建一个运行 C++ 程序的子进程来读取临时文件。我正在尝试为此使用NamedTemporaryFile,但根据文档,
在命名的临时文件仍处于打开状态时,该名称是否可用于第二次打开文件,因平台而异(在 Unix 上可以这样使用;在 Windows NT 或更高版本上不能)。
确实,在 Windows 上,如果我在写入后刷新临时文件,但在我希望它消失之前不要关闭它,子进程将无法打开它进行读取。
我正在通过使用delete=False 创建文件,在生成子进程之前关闭它,然后在完成后手动删除它来解决这个问题:
fileTemp = tempfile.NamedTemporaryFile(delete = False)
try:
fileTemp.write(someStuff)
fileTemp.close()
# ...run the subprocess and wait for it to complete...
finally:
os.remove(fileTemp.name)
这似乎不优雅。有一个更好的方法吗?也许一种方法可以打开临时文件的权限以便子进程可以访问它?
【问题讨论】:
-
您是否考虑过将流程管道化作为一种可能性?
-
@JonClements 是的,管道也是可能的,但它需要更改子流程的接口,我希望避免这种情况。
-
相关:Python 问题 14243 - tempfile.NamedTemporaryFile not particularly useful on Windows
-
另请参阅 Linux 解决方案:Can I set the umask for tempfile.NamedTemporaryFile in python?
标签: python windows temporary-files