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

时间:2014-09-13 11:55:23

标签: python shell

我想用Python脚本设置一个环境变量,影响我启动脚本的shell。这就是我的意思

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

但命令

echo ${TESTW}

什么都不返回。还有表达式

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

它不起作用。

还有另一种直接意义上的方法吗?或者将变量写入我从Python脚本的“外部”执行的文件中是否更好?

2 个答案:

答案 0 :(得分:1)

您可以通过以下方式影响环境: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变量返回值。

答案 1 :(得分:0)

我强烈建议使用chepner和Maxym提出的解决方案(Python脚本提供值,shell导出变量)。如果这不是您的选择,您仍然可以使用eval来执行python脚本在当前Bash进程中写入的内容:

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

警告:eval通常是阅读"邪恶"在Bash编程中。作为一般经验法则,应该避免盲目地"执行完全不在一个人控制之下的代码。这包括在运行时由另一个程序生成,如本例所示。另请参阅Stack Overflow问题 Why should eval be avoided in Bash, and what should I use instead?