当我运行vi --version
时,我看到VIM - Vi IMproved 7.3
但是当我运行以下脚本时,它会打印出我的版本7.2。为什么呢?
pathname
是vi
。 which vi
打印/usr/local/bin/vim
,--version
为7.3
。
which gvim
打印/usr/bin/gvim
,--version
也会打印较新版本的vim。
echo $EDITOR
打印vi
。
#!/usr/bin/python
import os
import sys
import os.path
import subprocess
import tempfile
def exec_vimcmd(commands, pathname='', error_stream=None):
"""Run a list of Vim 'commands' and return the commands output."""
try:
perror = error_stream.write
except AttributeError:
perror = sys.stderr.write
if not pathname:
pathname = os.environ.get('EDITOR', 'gvim')
args = [pathname, '-u', 'NONE', '-esX', '-c', 'set cpo&vim']
fd, tmpname = tempfile.mkstemp(prefix='runvimcmd', suffix='.clewn')
commands.insert(0, 'redir! >%s' % tmpname)
commands.append('quit')
for cmd in commands:
args.extend(['-c', cmd])
output = f = None
try:
try:
print "args are"
print args
subprocess.Popen(args).wait()
f = os.fdopen(fd)
output = f.read()
print "output is"
print output
print "that's the end of the output"
except (OSError, IOError), err:
if isinstance(err, OSError) and err.errno == errno.ENOENT:
perror("Failed to run '%s' as Vim.\n" % args[0])
perror("Please set the EDITOR environment variable or run "
"'pyclewn --editor=/path/to/(g)vim'.\n\n")
else:
perror("Failed to run Vim as:\n'%s'\n\n" % str(args))
perror("Error; %s\n", err)
raise
finally:
if f is not None:
f.close()
exec_vimcmd(['version'])
打印的参数是
['vi', '-u', 'NONE', '-esX', '-c', 'set cpo&vim', '-c', 'redir! >/var/folders/86/062qtcyx2rxbnmn8mtpkyghs0r0r_z/T/runvimcmducLQCe.clewn', '-c', 'version', '-c', 'quit']
答案 0 :(得分:1)
找出分配给pathname
的值,并查看它是否与在命令提示符下输入的which vim
或which gvim
一致。您的脚本正在查看您的$EDITOR
环境变量,但是当您从命令行运行(g)vim
时,它会搜索您的$PATH
以查找第一个匹配项。例如,您可能正在从CLI运行/opt/local/bin/vim
,但从脚本运行/usr/bin/vim
。