【发布时间】:2014-10-19 05:11:52
【问题描述】:
我正在尝试从 Python (2.6.4) 脚本中使用 vanilla vi(Solaris 10 上的 /usr/bin/vi)打开一个文件,但我所做的一切似乎都不起作用。我想让脚本将一些数据放在一个临时文件中,然后在 vi 中打开该文件供用户编辑。理想情况下,脚本会阻止对 vi 的调用,并在用户完成后继续执行,但我可以接受将脚本进程转换为 vi 进程(通过 exec 或其他方式)的解决方案。
我已经尝试了以下方法,但是对于其中的每一个,vi 都会将文件的第一页打印到屏幕上,然后以“输入读取错误”退出:
os.execlp('vi', 'vi', filename)
os.system('vi' + ' ' + filename)
subprocess.call('vi' + ' ' + filename, shell=True)
关于上下文,这里是完整的代码:
#!/usr/bin/python
import sys
import os
import subprocess
fname = "." + str(os.getpid()) + ".pvi.tmp"
f = open(fname, 'w')
f.write("## Remember to save this to a new file if you want to keep it!\n")
for line in sys.stdin:
f.write(line + "\n")
f.close()
# These all give the error "Input read error"
#os.execlp('vi', 'vi', fname)
#os.system('vi' + ' ' + fname)
#subprocess.call('vi' + ' ' + fname, shell=True)
os.unlink(fname)
我基本上是在尝试将管道流程模拟到 vi 中,而我的版本不支持(vi - 不起作用)。我会将它们通过管道传输到这个脚本,然后将输出写入一个临时文件并在 vi 中打开它。
任何帮助将不胜感激!
【问题讨论】:
-
如果你只输入
vi filename而不是运行Python脚本会发生什么?$TERM是否为您的终端正确设置? -
你是如何运行你的 Python 脚本的?
-
vi filename按预期工作。我的$TERM设置为 xterm,我认为这是正确的。我正在以echo "asdf" | pvi的身份运行脚本(称为 pvi)。 -
哦,这就是问题所在。输入是来自
echo的管道,而不是终端。