[英]reading from a NamedTemporaryFile in python
我正在创建一个tempFile,然后通过使用编辑器打开它来向其中添加文本(以便用户可以输入他的消息),然后将其保存以从保存的NamedTemporaryFile中读取文本。
with tempfile.NamedTemporaryFile(delete=False) as f:
f.close()
if subprocess.call([editor.split(" ")[0], f.name]) != 0:
raise IOError("{} exited with code {}.".format(editor.split(" ")[0], rc))
with open(f.name) as temp_file:
temp_file.seek(0)
for line in temp_file.readlines():
print line
但是每次它都是空白。 为什么会这样呢?
如果您使用SublimeText作为编辑器,则需要传入-w
或--wait
参数,以确保Python程序等待,直到您再次真正关闭SublimeText。
否则,您将开始编辑文件,并立即尝试读取当时为空的文件内容。
您还可以通过在阅读文件之前先print
验证这一点。
例如:
editor = ['/path/to/sublime_text', '-w']
with tempfile.NamedTemporaryFile(delete=False) as f:
f.close()
if subprocess.call(editor + [f.name]) != 0:
raise IOError()
# read file…
这是一个无需编辑器交互的解决方案,因为我没有足够的信息来模仿您的编辑器设置。
import tempfile
with tempfile.NamedTemporaryFile(delete=False) as f:
f.close()
with open(f.name, f.mode) as fnew:
# Replace with editor interaction
fnew.write('test')
fnew.seek(0)
for line in fnew.readlines():
print line
至少在我的系统和版本(2.7.2)上,我必须进行这些更改才能正确地重新打开文件对象并与之交互,并且它可以在Sublime中正确构建。 f.name是临时文件路径,f.mode是已经关闭的文件使用的模式(在这种情况下,它应默认为“ w + b”)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.