我正在尝试在 python 中获取包含一些环境变量的 bash 脚本。我跟着另一个线程去做。但是,从给定的代码片段中可以看出,其中一个变量似乎格式错误。
COLORTERM=gnome-terminal
mc=() { . /usr/share/mc/mc-wrapper.sh
}
_=/usr/bin/env
我正在使用以下代码来设置当前环境。
import os
import pprint
import subprocess
command = ['bash', '-c', 'source init_env && env']
proc = subprocess.Popen(command, stdout = subprocess.PIPE)
for line in proc.stdout:
(key, _, value) = line.partition("=")
os.environ[key] = value
proc.communicate()
'
如果我稍微更改一下上面的代码,比如设置一个条件:
for line in proc.stdout:
(key, _, value) = line.partition("=")
if not value:
continue
os.environ[key] = value
然后一切正常,但由于缺少一个括号,环境已损坏,从环境变量的片段中可以看出,括号出现在新行上。由于这种损坏,如果我运行一些其他命令,例如
os.system("ls -l")
它给我以下错误
sh: mc: line 1: syntax error: unexpected end of file
sh: error importing function definition for `mc'
这个问题可能的解决方案是什么?
非常感谢
最佳答案
可能最好的方法是创建一个单独的程序,以一种您自己的程序可以轻松明确地处理的方式写出环境变量;然后调用那个程序而不是env
。使用the standard pickle
module ,那个单独的程序可以像这样简单:
import os
import sys
import pickle
pickle.dump(os.environ, sys.stdout)
您可以将其保存到它自己的 .py
文件中,或者直接放入 Bash 命令中:
python -c 'import os, sys, pickle; pickle.dump(os.environ, sys.stdout)'
无论哪种情况,您都可以像这样处理它的输出:
import os
import pprint
import subprocess
import pickle
command = [
'bash',
'-c',
'source init_env && ' +
'python -c "import os, sys, pickle; ' +
'pickle.dump(os.environ, sys.stdout)"'
]
proc = subprocess.Popen(command, stdout = subprocess.PIPE)
for k, v in pickle.load(proc.stdout).iteritems():
os.environ[k] = v
proc.communicate()
关于python - python中格式错误的环境变量检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9306717/