Python中的环境变量异常检测

2024-04-26 10:03:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在python中源代码一个包含一些环境变量的bash脚本。我按照另一条线索去做。但是,似乎有一个变量的格式不正确,可以在给定的片段中看到。在

COLORTERM=gnome-terminal
mc=() {  . /usr/share/mc/mc-wrapper.sh
}
_=/usr/bin/env

我使用以下代码设置当前环境。在

^{pr2}$

'

如果我稍微改变一下上面的代码,比如设置一个条件:

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'

这个问题有什么可能的解决办法?在

非常感谢


Tags: key代码bashfor环境源代码valueos
1条回答
网友
1楼 · 发布于 2024-04-26 10:03:11

可能最好的方法是创建一个单独的程序,该程序以您自己的程序容易且明确地处理的方式写出环境变量;然后调用程序而不是env。使用the standard ^{} module,这个单独的程序可以这样简单:

import os
import sys
import pickle

pickle.dump(os.environ, sys.stdout)

您可以将其保存到自己的.py文件中,也可以直接放在Bash命令中:

^{pr2}$

在任何一种情况下,都可以这样处理其输出:

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()

相关问题 更多 >