你可以echo $ENV_VAR1
,並使用communicate
從標準輸出返回結果:
import subprocess
proc = subprocess.Popen('source /path/to/file/env.sh; echo $ENV_VAR1',
stdout=PIPE, shell=True)
env_var1, err = proc.communicate()
print(env_var1)
另一種選擇可能是使用Miki Tebeka's source
function:
import subprocess
import os
def source(script, update=True):
"""
source a file and return the environment as a dict.
http://pythonwise.blogspot.fr/2010/04/sourcing-shell-script.html (Miki Tebeka)
"""
proc = subprocess.Popen("source %s; env -0" % script, stdout=subprocess.PIPE,
shell=True)
output, err = proc.communicate()
env = dict((line.split("=", 1) for line in output.split('\x00') if line))
if update:
os.environ.update(env)
return env
source('/path/to/env.sh')
print(os.environ['ENV_VAR1'])
如果/path/to/file/env.sh
包含
ENV_VAR1=FOO
export ENV_VAR1
scri PT上面打印
FOO
以上,I made a small change到 的功能,使得env
使用一個空字節(\x00
)以分離輸出 線。這使得解析跨越多個 行的名稱/值對成爲可能。
OP不說這是一個問題。看起來他/她需要一種方法來保存後續shell調用之間的上下文 –