【问题标题】:Python subprocess: Get environment after subprocess completedPython子进程:子进程完成后获取环境
【发布时间】:2024-11-25 01:45:02
【问题描述】:

我们有一个工具附带一个 shell 脚本,它设置运行该工具所需的环境变量。这是相当复杂的不同脚本链,用于确定一堆东西并导出/设置环境。

然后我们每次想要调用工具本身时都需要该环境。

理想情况下,我们可以这样做:

completed_script = subprocess.run("the_settings_script.bat")
[...]
subprocess.run(["some", "other", "call"], env=completed_script.env)

这显然不起作用。运行子进程后还有另一种恢复环境的好方法吗?我们当然可以在实际工具调用之前的每个subprocess.run() 调用中运行该脚本,但这有点低效。

【问题讨论】:

    标签: python subprocess


    【解决方案1】:

    不,没有可移植的方式。在任何现代操作系统中,父环境都被传递给子进程,但子进程决不能更改其父环境。它曾经在良好的旧 MS/DOS 中是可能的,并且仅适用于 .com 类型的程序,因为父环境的地址存储在子进程中的一个众所周知的地址中,但我不知道 Windows 或任何类 Unix 系统的此类技巧.

    这是在启动 Python 解释器之前设置环境的最佳方法。这样,更改后的环境将传递给所有子进程。

    【讨论】: