3 回答
TA贡献1871条经验 获得超13个赞
您的方法存在的问题是您正在尝试解释bash脚本。首先,您只是尝试解释导出语句。然后您会发现人们正在使用变量扩展。以后人们将条件文件放入他们的文件中,或处理替代文件。最后,您将获得功能齐全的bash脚本解释器,其中包含大量错误。不要那样做
让Bash为您解释文件,然后收集结果。
您可以这样做:
#! /usr/bin/env python
import os
import pprint
import shlex
import subprocess
command = shlex.split("env -i 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()
pprint.pprint(dict(os.environ))
确保处理错误,以防bash失败source init_env,bash本身无法执行,子进程无法执行bash或任何其他错误。
将env -i在命令行的开始创造一个清洁的环境。这意味着您只能从中获取环境变量init_env。如果要继承的系统环境,请省略env -i。
请阅读有关子流程的文档,以获取更多详细信息。
注意:这将仅捕获使用export语句设置的变量,因为env仅打印导出的变量。
请享用。
请注意,Python文档指出,如果要操作环境,则应os.environ直接操作而不是使用os.putenv()。我认为是一个错误,但我离题了。
添加回答
举报