在python中设置父shell的环境变量

时间:2016-03-03 18:59:57

标签: python shell environment-variables

我正在尝试从python中修改父shell上的环境变量。到目前为止我所尝试的并没有奏效:

~ $ export TESTING=test
~ $ echo $TESTING
test
~ $
~ $
~ $ python
Python 2.7.10 (default, Jun  1 2015, 18:05:38)
[GCC 4.9.2] on cygwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.environ['TESTING']
'test'
>>> os.environ['TESTING'] = 'changed'
>>> os.environ['TESTING']
'changed'
>>> quit()
~ $
~ $
~ $ echo $TESTING
test

这就是我能想到的一切。可以吗?

2 个答案:

答案 0 :(得分:2)

这是不可能的。

子进程从父进程继承其环境而不是共享它们。因此,您对环境所做的任何修改都将在子(python)进程中仅反映 。实际上,您只是根据shell的环境覆盖os模块创建的字典,而不是shell的实际环境变量。

https://askubuntu.com/questions/389683/how-we-can-change-linux-environment-variable-in-python

Why can't environmental variables set in python persist?

答案 1 :(得分:2)

您可以做的是通过使用shell的Command Substitution功能将Python命令的输出解析为shell命令,该功能更常用于评估另一个命令的内联命令。例如。 chown `id -u` /somedir

在您的情况下,您需要将shell命令打印到stdout,它将由shell进行评估。创建Python脚本并添加:

testing = 'changed'
print 'export TESTING={testing}'.format(testing=testing)

然后从你的shell:

$ `python my_python.sh`
$ echo TESTING
changed

基本上,任何字符串都将由shell解释,甚至是lsrm