python脚本tempfi中的Vim编辑器

2024-04-25 15:15:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经成功地找到了生成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脚本中的文件,我将如何访问它?在

谢谢你


Tags: 代码namefromimport脚本messageosvim
3条回答

我遇到了同样的问题,也有同样的问题。在

不删除临时文件只是为了让它可以被读取,这并不是一个最佳实践。我发现了以下方法来读取在vim编辑之后写入NamedTempFile实例的内容,读取它,并保留删除tempfile的优点。(如果不是自己删除就不是临时的,对吧?!)在

必须倒带tempfile然后再读取它。 我在http://pymotw.com/2/tempfile/找到了答案

import os
import tempfile
from subprocess import call

temp = tempfile.TemporaryFile()
try:
    temp.write('Some data')
    temp.seek(0)

    print temp.read()
finally:
    temp.close()

下面是我在脚本中使用的实际代码: 导入临时文件 导入操作系统 从子流程导入调用

^{pr2}$

with块中的所有内容都有作用域。如果使用with语句创建临时文件,则块结束后它将不可用。在

您需要读取with块中的tempfile内容,或者使用其他语法来创建临时文件,例如:

tempfile = NamedTemporaryFile(suffix=".tmp")
# do stuff
tempfile.close()

如果确实要在块后自动关闭文件,但仍能重新打开它,请将delete=False传递给NamedTemporaryFile构造函数(否则关闭后将删除它):

^{pr2}$

顺便说一句,您可能希望使用envoy来运行子进程,很好的库:)

NamedTemporaryFile创建一个在关闭后被删除的文件(docs)。因此,它不适用于需要向临时文件写入内容并在文件关闭后读取内容的情况。在

使用mkstemp代替(docs):

f, fname = mkstemp(suffix=".tmp")
f.write("...")
f.close()
call([EDITOR, fname])

相关问题 更多 >