我正在尝试从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
这就是我能想到的一切。可以吗?
答案 0 :(得分:2)
这是不可能的。
子进程从父进程继承其环境而不是共享它们。因此,您对环境所做的任何修改都将在子(python)进程中仅反映 。实际上,您只是根据shell的环境覆盖os
模块创建的字典,而不是shell的实际环境变量。
https://askubuntu.com/questions/389683/how-we-can-change-linux-environment-variable-in-python
答案 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解释,甚至是ls
,rm
等