Python:在 subprocess.Popen(..) 中导出环境变量

标签 python python-2.7 environment-variables

我在调用 subprocess.Popen 时设置环境变量时遇到问题。环境变量似乎没有被设置。有关如何为 Python 命令行调用正确设置环境变量的任何建议?

我的目标是运行一个使用由我的 Python 代码确定的环境变量的脚本:

d = dict(os.environ)
d["TEST_VARIABLE"] = str(1234)
subprocess.Popen('/usr/bin/mybinary', env=d).wait()

但脚本的 react 就像从未设置过变量一样

这是我尝试使用 Python 的交互式解释器进行的测试:

d = dict(os.environ)
d["TEST_VARIABLE"] = str(1234)
subprocess.Popen(['/bin/echo', '$TEST_VARIABLE'], env=d).wait() 

输出是:

"$TEST_VARIABLE"
0

我认为 env=d 应该为子进程设置环境,但显然没有。有关如何纠正此问题的任何建议?

最佳答案

环境变量的替换在命令行是由shell完成的,而不是/bin/echo。所以你需要在 shell 中运行命令来获得替换:

In [22]: subprocess.Popen('/bin/echo $TEST_VARIABLE', shell=True, env=d).wait()
1234
Out[22]: 0

但是,这并不意味着在 shell=False 时没有设置环境变量。即使没有 shell=True,可执行文件也会看到由 env 参数设置的环境变量。例如,dateTZ 环境变量的影响:

In [23]: subprocess.Popen(["date"], env={'TZ': 'America/New_York'}).wait()
Wed Oct 29 22:05:52 EDT 2014
Out[23]: 0

In [24]: subprocess.Popen(["date"], env={'TZ': 'Asia/Taipei'}).wait()
Thu Oct 30 10:06:05 CST 2014
Out[24]: 0

关于Python:在 subprocess.Popen(..) 中导出环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26643719/

相关文章:

python - 替换 FASTA 比对文件列中字母的所有实例

python - 在 Python 中解释 ffmpeg 输出

python - 如何使用 python 电子邮件获取解码附件文件名?

java - 如何在 Windows 10 上设置 Java 运行时环境

python - Flask看不到环境变量

python - 从多个数据帧创建列

python - 为什么我一直收到 'ImportError: cannot import name db' ?

python-2.7 - 为什么 ElementTree 拒绝带有 "encoding incorrect"的 UTF-16 XML 声明?

python - 如何让 python request.get 等待几秒钟?

r - 在 r 中使用带有辅助函数错误的 "by"