是否有可能改变在Python中的父进程的环境?

在Linux中当我从shell调用python复制它的环境,并启动python进程。 因此,如果我做了如下的事情:

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

当python进程返回时,假设它原来是未定义的,FOO仍然是未定义的。 有没有办法让python进程(或任何subprocess)修改其父进程的环境?

我知道你通常使用类似的东西来解决这个问题

 source script_name.sh 

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

没有进程可以改变其父进程(或任何其他现有进程的环境)。

但是,您可以通过使用修改的环境创build新的交互式shell来创build新的环境。

你必须生成一个使用升级环境的shell的新副本,并且可以访问现有的stdin,stdout和stderr,并且重新初始化舞蹈。

你需要做一些像使用subprocess.Popen来运行/bin/bash -i

所以原来的shell运行Python,运行一个新的shell。 是的,你有很多进程正在运行。 不,它不是太糟糕,因为除了等待子shell完成以外,原来的shell和Python还没有做任何事情,所以它们也可以干净地退出。

对于任何subprocess来说,改变父进程的环境是不可能的。 最好的办法是将shell语句输出到stdout中,然后将其写入到源文件中。

我将使用bash eval语句,并使用python脚本输出shell代码

child.py:

 #!/usr/bin/env python print 'FOO="A_Value"' 

parent.sh

 #!/bin/bash eval `./child.py`