5

我想复制当您执行“git commit”之类的操作时发生的功能。它会打开您的编辑器,您输入一些内容,然后保存/退出以将该文件交还给启动编辑器的脚本。

我将如何在 Python 中实现此功能?

编辑:

感谢您的建议,这是一个基于答案的工作示例:

import os, subprocess, tempfile

(fd, path) = tempfile.mkstemp()
fp = os.fdopen(fd, 'w')
fp.write('default')
fp.close()

editor = os.getenv('EDITOR', 'vi')
print(editor, path)
subprocess.call('%s %s' % (editor, path), shell=True)

with open(path, 'r') as f:
  print(f.read())

os.unlink(path)
4

5 回答 5

4

通常的情况是:

  1. 创建一个临时文件,将默认内容写入其中
  2. 启动存储在环境变量“EDITOR”中的命令。这通常是一个 shell 命令,因此它可能包含参数 -> 通过 shell 运行它或相应地解析它
  3. 一旦进程终止,读回临时文件
  4. 删除临时文件

所以是这样的:

import os, subprocess, tempfile
f, fname = tempfile.mkstemp()
f.write('default')
f.close()
cmd = os.environ.get('EDITOR', 'vi') + ' ' + fname
subprocess.call(cmd, shell=True)
with open(fname, 'r') as f:
    #read file
os.unlink(fname)
于 2012-04-12T18:11:42.090 回答
1

将您要修改的文本数据保存到临时文件,打开编辑器 (vi) 作为指向该文件的外部进程,使用 os.system - 或 subprocess.Popen 如果您需要对其进行更多控制,然后读取临时文件回档。

我建议你默认打开 vi,但要尊重“VISUAL”环境变量的内容。

import os

name = os.tmpnam()
editor = "vi" if not ["VISUAL"] in os.environ else os.environ["VISUAL"]
os.system("%s %s" % (editor, name))
data = open(name).read()
os.unlink(name)
于 2012-04-12T18:12:20.360 回答
0
os.system("\bin\vi %s"%filename)

ftxt = open(filename,"r").read()
于 2012-04-12T18:07:52.123 回答
0

安装ipython并查看%ed命令。另请参阅此类似问题中的其他建议

于 2012-04-12T18:08:43.727 回答
0

实现这一点的一种方法是使用子进程。代码看起来像这样:

import subprocess
subprocess.call(['vi', 'filename.txt'])

从此返回将给出 vi 的返回状态。

于 2012-04-12T18:11:50.770 回答