我正在创建一个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
但每次它都是空白的。为什么会这样?
答案 0 :(得分:1)
如果您使用SublimeText作为编辑器,则需要传入-w
或--wait
参数,以确保Python程序等到实际再次关闭SublimeText为止。
否则,您将开始编辑该文件,并立即尝试读取其当时为空的内容。
您还可以在阅读文件之前输入print
来验证。
E.g:
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…
答案 1 :(得分:0)
这是一个没有编辑器交互的解决方案,因为我没有足够的信息来模仿您的编辑器设置。
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')。