繁体   English   中英

从python中的NamedTemporaryFile中读取

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM