如何用Python在当前shell中设置环境变量?

如何用Python在当前shell中设置环境变量?

问题描述:

我想设置一个环境变量有Python剧本,影响我开始在脚本外壳。这里是我的意思如何用Python在当前shell中设置环境变量?

python -c "import os;os.system('export TESTW=1')" 

但命令

echo ${TESTW} 

回报什么。还有表达式

python -c "import os;os.environ['TEST']='1'" 

它不起作用。

是否有另一种方式来做到这一点的直接意义?还是把变量写在我从Python脚本的“外部”执行的文件中更好?

您可以通过以下方式影响环境:putenv但它不会影响调用者环境,只会影响分叉儿童的环境。 在启动python脚本之前设置环境真的好多了。

我可能会提出这样的变体。你创建一个bash脚本和一个python脚本。在bash脚本中,你用params调用python脚本。一个参数 - 一个env变量。例如:

#!/bin/bash 

export TESTV1=$(python you_program.py testv1) 
export TESTV2=$(python you_program.py testv2) 

you_program.py testv1仅返回一个env变量的值。

+0

那么,在这种情况下,这个python脚本将被用来为别的东西设置环境。 – Alex 2014-09-13 12:04:12

我强烈建议使用由chepner和Maxym(其中Python脚本提供值和您的shell导出变量)提出的解决方案。如果这不是一个选择,你仍然可以使用eval执行什么python脚本在当前的Bash过程中写道:

eval $(python -c "print('export TESTW=1')") 

注意:eval通常读取bash编程“邪恶”。作为一般的经验法则,应该避免“盲目”执行不完全在其控制之下的代码。这包括在运行时由另一个程序生成,如在这种情况下。另请参阅堆栈溢出问题Why should eval be avoided in Bash, and what should I use instead?