2 回答

TA贡献1828条经验 获得超3个赞
我结果做了以下事情:
创建一个
launch
命令包装subprocess.Popen
来启动我的 bash 命令,另外允许我检索当前环境或传递自定义环境创建 a
get_env
来解析上一个命令的返回并获取dict
环境的 a
launch
包装纸
import os
import subprocess as sp
def launch(cmd_, env=os.environ, get_env=False):
if get_env: cmd_ += " && printenv"
load = sp.Popen(cmd_, shell=True, stdout=sp.PIPE, stderr=sp.PIPE, env=env)
out = load.communicate()
err = load.returncode
return(err, out)
检索环境
def get_env(out, encoding='utf-8'):
lout = str(out[0], encoding).split('\n')
new_env = {}
for line in lout:
if len(line.split('=')) <= 1:
pass
else:
k = line.split("=")[0]
v = "=".join(line.split("=")[1:])
new_env[k] = v
return new_env
(这是一个简单的版本,如果你的环境中有函数之类的东西,它可能会更复杂——它会发生。)
结果:
我可以按如下方式使用它:
err, out = launch("export TEST=1", get_env=True)
if not err: new_env = get_env(out)
err, out = launch("echo $TEST", env=new_env)
因此:
>>> print(str(out[0], encoding='utf-8'))
1
添加回答
举报