是否有可能改变在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`