Python 从完成的子进程中获取环境
Python get env from finished subprocess
python3.9
所以我有一个像这样的子流程
m_env = os.environ.copy()
process = subprocess.Popen(
['export', 'TEST=test'],
env=m_env,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
shell=True
)
result = process.wait()
new_env = process.getenv() #how to get this so the new_env has the 'TEST=test' in it.
现在子进程本身正在修改环境,我想知道如何从进程中获取修改后的环境,示例使用导出,但是我 运行 一个脚本可能会更改或添加其他环境变量,所以我想得到整个环境。
你可以打印子进程中的所有环境变量shell,但你必须在之后解析数据。
import os
import subprocess
def main():
m_env = os.environ.copy()
process = subprocess.Popen(
['export TEST=test && export'],
env=m_env,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
shell=True
)
process.wait()
print(process.stdout.read()) # all environment variables
if __name__ == '__main__':
main()
编辑:将环境打印函数从 printenv
(在解析时可能有歧义)更改为 export
。感谢Charles Duffy
@Pavel Hamerník 发布的解决方案是起点。在@Charles Duffy 的评论讨论指导下,以下解决方案最适合我的实施。
import os
import subprocess
def main():
m_env = os.environ.copy()
process = subprocess.Popen(
['/bin/bash', '-c', '. /path/script.sh && export > /tmp/env.txt'],
env=m_env,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
shell=True
)
process.wait()
print(process.stdout.read()) # read the stdout from script
if __name__ == '__main__':
main()
注意:导出输出被定向到 /tmp/
中的文件。
python3.9
所以我有一个像这样的子流程
m_env = os.environ.copy()
process = subprocess.Popen(
['export', 'TEST=test'],
env=m_env,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
shell=True
)
result = process.wait()
new_env = process.getenv() #how to get this so the new_env has the 'TEST=test' in it.
现在子进程本身正在修改环境,我想知道如何从进程中获取修改后的环境,示例使用导出,但是我 运行 一个脚本可能会更改或添加其他环境变量,所以我想得到整个环境。
你可以打印子进程中的所有环境变量shell,但你必须在之后解析数据。
import os
import subprocess
def main():
m_env = os.environ.copy()
process = subprocess.Popen(
['export TEST=test && export'],
env=m_env,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
shell=True
)
process.wait()
print(process.stdout.read()) # all environment variables
if __name__ == '__main__':
main()
编辑:将环境打印函数从 printenv
(在解析时可能有歧义)更改为 export
。感谢Charles Duffy
@Pavel Hamerník 发布的解决方案是起点。在@Charles Duffy 的评论讨论指导下,以下解决方案最适合我的实施。
import os
import subprocess
def main():
m_env = os.environ.copy()
process = subprocess.Popen(
['/bin/bash', '-c', '. /path/script.sh && export > /tmp/env.txt'],
env=m_env,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
shell=True
)
process.wait()
print(process.stdout.read()) # read the stdout from script
if __name__ == '__main__':
main()
注意:导出输出被定向到 /tmp/
中的文件。