是否有可能改变在Python中的父进程的环境?
在Linux中当我从shell调用python复制它的环境,并启动python进程。 因此,如果我做了如下的事情:
import os os.environ["FOO"] = "A_Value"
当python进程返回时,假设它原来是未定义的,FOO仍然是未定义的。 有没有办法让python进程(或任何subprocess)修改其父进程的环境?
我知道你通常使用类似的东西来解决这个问题
source script_name.sh
但这与我的其他要求相冲突。
- Laravel环境驱动的数据库设置?
- 最好的一般SVN忽略模式?
- 如何在Unix / Linux中获得进程的path
- Java当前的机器名称和login用户?
- PHP有一个相当于Python的virtualenv或ruby的沙箱?
没有进程可以改变其父进程(或任何其他现有进程的环境)。
但是,您可以通过使用修改的环境创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`
- 如何通过一个合适的文件来设置活动的spring 3.1环境configuration文件,而不是通过envvariables或系统属性
- 如何在不同的环境中获取mysqli错误?
- Powershell:仅为单个命令设置环境variables
- 我怎样才能得到当前的用户目录?
- R中的parent.frame()和parent.env()有什么不同? 他们如何在参考呼叫方面有所不同?
- 使用JREpath设置Eclipse
- 我如何确定我的rails是否在开发环境而不是testing环境?
- .bashrc,.bash_profile和.environment有什么区别?
- 如何使用seed.rbselect性地填充开发和/或生产数据库?