【发布时间】:2016-09-03 09:34:42
【问题描述】:
原理上的问题是一样的,我有一个subprocess.system调用
...
EDITOR = os.environ.get('EDITOR', 'vim')
subprocess.call([EDITOR, tf.name])
...
其中EDITOR 是环境$EDITOR 变量,tf.name 只是一个文件名。
但是,sublime text 建议将 $EDITOR 设置为 export EDITOR='subl -w' 让我的通话看起来像这样:
subprocess.call(['subl -w', "somefilename"])
它会像这样失败:
raceback (most recent call last):
File "/usr/bin/note", line 65, in <module>
storage["notes"][args.name] = writeNote(args.name, storage)
File "/usr/bin/note", line 54, in writeNote
subprocess.call([EDITOR, tf.name])
File "/usr/lib/python3.5/subprocess.py", line 557, in call
with Popen(*popenargs, **kwargs) as p:
File "/usr/lib/python3.5/subprocess.py", line 947, in __init__
restore_signals, start_new_session)
File "/usr/lib/python3.5/subprocess.py", line 1541, in _execute_child
raise child_exception_type(errno_num, err_msg)
FileNotFoundError: [Errno 2] No such file or directory: 'subl -w'
当然,它应该看起来像这样
subprocess.call([subl", "-w" "somefilename"])
一种解决方法可能是
args = EDITOR.split(" ")
subprocess.call(args + ["somefilename"])
但我对此有点谨慎,因为我不知道$EDITOR 设置为什么,这样做安全吗?
处理这种情况的正确方法是什么?
【问题讨论】:
-
@andlrc 不,不是重复的,这不是我的问题。我知道如何访问环境变量
标签: python command-line environment-variables sublimetext3