繁体   English   中英

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()

编辑:将环境打印 function 从printenv (解析时可能不明确)更改为export 感谢查尔斯·达菲

@Pavel Hamerník 发布的解决方案是起点。 在@Charles Duffy 评论讨论的指导下,以下解决方案最适合我的实施。

import os
import subprocess

def main():
    m_env = os.environ.copy()
    process = subprocess.Popen(
        ['/bin/bash /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()

注意:导出 output 被定向到/tmp/中的文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM