如何在一个脚本中设置环境变量,在将输出汇总到另一个脚本之后,我需要在第一个脚本中设置某个环境变量并在第二个脚本中使用。
我正在使用python脚本。
python script1.py | python script2.py
在script1.py
,我正在做
os.environ["some_key"] = some_value
并在script2.py
中,我试图将其视为
saved_value = os.environ["some_key"]
当我尝试运行上述脚本时,
Traceback (most recent call last):
File "script2.py", line 11, in <module>
filename = os.environ["some_key"]
File "/usr/lib/python2.7/UserDict.py", line 23, in __getitem__
raise KeyError(key)
无论如何这可以纠正吗?我特别需要从os.environ["some_key"]
中的script2.py
读取它,因为该文件是更大框架的一部分而无法更改它。我与script1.py
答案 0 :(得分:3)
除非您自己启动,否则无法设置其他进程的环境变量 - 。
如果可以,请考虑使用script1
直接更改script2
以启动subprocess.Popen
,并提供env
参数。
如果您不能这样做,您需要更改父进程(可能是启动脚本的bash脚本),以某种方式从script1
接收所需的变量并设置它在启动script2时。
答案 1 :(得分:2)
您将无法改变兄弟进程的环境。
您可以使用如下所示的复杂构造:
{ export some_key=$(python script1.py) ; } |& python script2.py
其中script1.py
将环境变量输出到stdout
,并将要输入的内容写入script2.py
到stderr
。这只会允许设置一个环境变量。
示例:
$ cat script1.py
import sys
print "some_env_value"
sys.stderr.write("some_piped_value\n")
$ cat script2.py
import os
import sys
print "Passed through enviroment:", os.environ["some_key"]
print "Passed through stdin:",
for line in sys.stdin:
print line
结果:
$ { export some_key=$(python script1.py) ; } |& python script2.py
Passed through enviroment: some_env_value2
Passed through stdin: some_piped_value