【发布时间】:2018-11-11 06:34:19
【问题描述】:
我正在尝试从我的 python 脚本中打开文本编辑器,我注意到一些显然与我对 tempfile 文档的理解相矛盾的东西。
我的实验从 Alex Martelli 的 answer 开始。
我的代码 -
import os
import tempfile
import subprocess
f = tempfile.NamedTemporaryFile(mode='w+t', delete=True)
n = f.name
print('Does exist? : {0}'.format(os.path.exists(n)))
f.close()
print('Does exist? : {0}'.format(os.path.exists(n)))
subprocess.run(['nano', n])
with open(n) as f:
print (f.read())
print('Does exist? : {0}'.format(os.path.exists(n)))
输出:
Does exist? : True
Does exist? : False
Hello from temp file.
Does exist? : True
在代码中,我在用delete=True 声明的文件对象上显式调用close,但是即使这样我也可以对其进行写入和读取内容。我不明白为什么会这样。
根据文档-
如果 delete 为 true(默认值),则文件一关闭就会被删除。
如果调用close 会删除文件,那么我不应该能够写入然后读取它。但它会显示您在nano 执行时输入的文件的正确 内容。和 tempfile 一样,该文件在我打开终端并运行脚本的目录中不可见。
更奇怪的是,os.path.exists 前两次正常工作,而第三次可能不正确。
我在这里错过了什么吗?
附加实验:
如果我运行以下代码,那么我可以清楚地看到创建的文件。但这在原始代码中不会发生。
n = '.temp'
subprocess.run(['nano', n])
with open(n) as f:
print (f.read())
print('Does exist? : {0}'.format(os.path.exists(n)))
【问题讨论】:
-
来自文档“如果 delete 为 true(默认),则文件一关闭就会被删除。”
-
我无法重现您的错误。文件一关闭就被删除。
-
@DYZ 对不起,我忘了添加输出。现已编辑。没有错误。问题是它不应该工作。为什么它有效?
-
好的。是
nano再次创建您的临时文件。
标签: python python-3.x subprocess temporary-files nano