在Linux中,当我从外壳中调用python时,它将复制其环境,并启动python进程。因此,如果我执行以下操作:
import os os.environ["FOO"] = "A_Value"
当python进程返回时,假设FOO最初是未定义的,它将仍然是未定义的。python进程(或任何子进程)是否可以修改其父进程的环境?
我知道您通常使用类似的方法解决此问题
source script_name.sh
但这与我的其他要求相冲突。
任何流程都不能更改其父流程(或任何其他现有流程的环境)。
但是,您可以通过使用修改后的环境创建新的交互式外壳来创建新环境。
您必须生成使用升级环境并可以访问现有stdin,stdout和stderr的Shell的新副本,并进行其重新初始化。
您需要执行类似use subprocess.Popen的操作/bin/bash -i。
/bin/bash -i
因此,原始外壳运行Python,而新外壳运行。是的,您正在运行许多进程。不,还算不错,因为原始的shell和Python除了等待子shell完成以使它们也可以干净退出之外,实际上并没有做任何事情。