在 Linux 中,当我从 shell 调用 python 时,它会复制其环境,并启动 python 进程。因此,如果我执行以下操作:
import os
os.environ["FOO"] = "A_Value"
当python进程返回时,FOO,假设它最初是未定义的,仍然是未定义的。 python进程(或任何子进程)有没有办法修改其父进程的环境?
我知道你通常使用类似的方法来解决这个问题
source script_name.sh
但这与我的其他要求相冲突。
最佳答案
任何进程都不能更改其父进程(或任何其他现有进程的环境)。
但是,您可以通过使用修改后的环境创建新的交互式外壳来创建新环境。
您必须生成一个新的 shell 副本,该副本使用升级后的环境并可以访问现有的标准输入、标准输出和标准错误,并进行重新初始化。
您需要执行类似使用 subprocess.Popen 运行 /bin/bash -i
的操作。
所以原来的 shell 运行 Python,它运行一个新的 shell。是的,您有很多进程正在运行。不,这并不算太糟糕,因为原始 shell 和 Python 并没有真正做任何事情,只是等待子 shell 完成,这样它们也可以干净地退出。
关于python - 是否可以在 Python 中更改父进程的环境?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/263005/