标题几乎说明了一切......
假设我有一个bash脚本:
#!/bin/bash
# do some magic here, perhaps fetch something with wget, and then:
if [ "$VAR1" = "foo" ]; then
export CASEVARA=1
fi
export CASEVARB=2
# and potentially many other vars...
如何从python运行此脚本并检查设置的env变量。理想情况下,我希望反向继承"反向继承"它们进入运行Python的主环境。
这样我就可以用
访问它们了import os
# run the bash script somehow
print os.environ['CASEVARA']
答案 0 :(得分:8)
当然!它只需要一些黑客攻击:
variables = subprocess.Popen(
["bash", "-c", "trap 'env' exit; source \"$1\" > /dev/null 2>&1",
"_", "yourscript"],
shell=False, stdout=subprocess.PIPE).communicate()[0]
这将运行未经修改的脚本,并在不同的行上以foo=bar
的形式为您提供所有导出的变量。
在支持的操作系统(如GNU)上,您可以trap 'env -0' exit
获取\0
个分开的变量,以支持多行值。
答案 1 :(得分:1)
使用子流程模块:
stdout=subprocess.PIPE
set subprocess.communicate()
答案 2 :(得分:0)
为了使它对bash脚本透明,你可以从子进程中继承Popen并让它暴露它的进程的环境。你也可以从磁盘中获取它的内容
with open('/proc/%s/environ' % (pid,)) as f:
env = f.read().replace('\x00', '\n')
会起作用,但是你会反对关闭和清理这个过程。