我已经成功地找到了生成vim编辑器和从python脚本创建tempfile的代码。代码在这里,我在这里找到的:call up an EDITOR (vim) from a python script
import sys, tempfile, os
from subprocess import call
EDITOR = os.environ.get('EDITOR','vim')
initial_message = ""
with tempfile.NamedTemporaryFile(suffix=".tmp") as tempfile:
tempfile.write(initial_message)
tempfile.flush()
call([EDITOR, tempfile.name])
我遇到的问题是退出编辑器后无法访问tempfile的内容。在
^{pr2}$我明白了
ValueError: I/O operation on closed file
我做到了:
myfile = open(tempfile.name)
IOError: [Errno 2] No such file or directory: '/tmp/tmp7VKzfl.tmp'
一旦用编辑器编辑了python脚本中的文件,我将如何访问它?在
谢谢你
我遇到了同样的问题,也有同样的问题。在
不删除临时文件只是为了让它可以被读取,这并不是一个最佳实践。我发现了以下方法来读取在vim编辑之后写入NamedTempFile实例的内容,读取它,并保留删除tempfile的优点。(如果不是自己删除就不是临时的,对吧?!)在
必须倒带tempfile然后再读取它。 我在http://pymotw.com/2/tempfile/找到了答案
下面是我在脚本中使用的实际代码: 导入临时文件 导入操作系统 从子流程导入调用
^{pr2}$with
块中的所有内容都有作用域。如果使用with
语句创建临时文件,则块结束后它将不可用。在您需要读取
with
块中的tempfile内容,或者使用其他语法来创建临时文件,例如:如果确实要在块后自动关闭文件,但仍能重新打开它,请将
^{pr2}$delete=False
传递给NamedTemporaryFile
构造函数(否则关闭后将删除它):顺便说一句,您可能希望使用envoy来运行子进程,很好的库:)
NamedTemporaryFile
创建一个在关闭后被删除的文件(docs)。因此,它不适用于需要向临时文件写入内容并在文件关闭后读取内容的情况。在使用
mkstemp
代替(docs):相关问题 更多 >
编程相关推荐