首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Python打开vi

从Python打开vi
EN

Stack Overflow用户
提问于 2012-04-13 02:05:14
回答 5查看 5.8K关注 0票数 5

我想要复制当你做一些像'git commit‘这样的事情时发生的功能。它打开你的编辑器,你输入一些东西,然后保存/退出,将该文件交还给启动编辑器的脚本。

如何在Python中实现此功能?

编辑:

谢谢你的建议,这里有一个基于答案的工作示例:

代码语言:javascript
复制
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)
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-04-13 02:11:42

通常的情况是:

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

临时文件

所以就像这样:

代码语言:javascript
复制
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)
票数 4
EN

Stack Overflow用户

发布于 2012-04-13 02:12:20

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

我建议您默认打开vi,但请注意"VISUAL“环境变量的内容。

代码语言:javascript
复制
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)
票数 1
EN

Stack Overflow用户

发布于 2012-04-13 02:07:52

代码语言:javascript
复制
os.system("\bin\vi %s"%filename)

ftxt = open(filename,"r").read()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10129214

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档