一尘不染

是否可以在Python中更改父进程的环境?

linux

在Linux中,当我从外壳中调用python时,它将复制其环境,并启动python进程。因此,如果我执行以下操作:

import os
os.environ["FOO"] = "A_Value"

当python进程返回时,假设FOO最初是未定义的,它将仍然是未定义的。python进程(或任何子进程)是否可以修改其父进程的环境?

我知道您通常使用类似的方法解决此问题

source script_name.sh

但这与我的其他要求相冲突。


阅读 380

收藏
2020-06-02

共1个答案

一尘不染

任何流程都不能更改其父流程(或任何其他现有流程的环境)。

但是,您可以通过使用修改后的环境创建新的交互式外壳来创建新环境。

您必须生成使用升级环境并可以访问现有stdin,stdout和stderr的Shell的新副本,并进行其重新初始化。

您需要执行类似use subprocess.Popen的操作/bin/bash -i

因此,原始外壳运行Python,而新外壳运行。是的,您正在运行许多进程。不,还算不错,因为原始的shell和Python除了等待子shell完成以使它们也可以干净退出之外,实际上并没有做任何事情。

2020-06-02