python - python中格式错误的环境变量检测

标签 python linux bash environment-variables

我正在尝试在 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/

相关文章:

linux - 我的 jython 程序无法检测到我的 shell 脚本的错误

python - 将 Dataframe 列中的值除以同一列中的前一个值

python - 如何在 Linux 服务器中将 Python、Oracle 11g 与 cx_Oracle 连接起来?

c++ - Linux 中使用三元运算符从 const char * 到 char * 的无效转换

c - 调试 postgresql for where 'A' < 'a'

bash - 如何在 bash 中为 getopts 提供大量参数?

python - 使用坐标和索引的 .ifc 文件格式的三角测量图案

python - 查找 CSV 文件中的最高平均值

python - 在 setup.py 中将 python-dev 列为 install_requires

linux - 如何列出特定环境变量的文件?