当前位置: 首页 > 面试题库 >

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

黄毅
2023-03-14
问题内容

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

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

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

但是脚本的反应就像从未设置过变量一样

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

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

输出为:

"$TEST_VARIABLE"
0

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


问题答案:

命令行上 环境变量的替换由外壳程序完成,而不是由/ 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


 类似资料:
  • 我有一个奇怪的例子,我有一个secret.env文件,我把所有的环境变量都设置成这样: 秘密. env 然后我构建了一个docker文件来导出所有变量并运行应用程序: 但是,这将引发一个关键错误: 当我在我的窗户上运行这个程序时,它工作得很好! 有人能帮我一下吗?

  • 我有两个shell脚本: 第一个:<代码>1。sh,其内容如下: 第二:<代码>2。sh,其内容如下: 两者都具有执行权限。当我运行<代码>2时。sh,我希望环境变量PROP由1设置和导出。sh,对。这里怎么了?

  • 本文向大家介绍Python环境变量,包括了Python环境变量的使用技巧和注意事项,需要的朋友参考一下 这是重要的环境变量,Python可以识别它们- 序号 变量与说明 1 PYTHONPATH 它的作用类似于PATH。这个变量告诉Python解释器在哪里可以找到导入程序的模块文件。它应该包括Python源库目录和包含Python源代码的目录。PYTHONPATH有时是由Python安装程序预设的

  • 问题内容: 在安装gnuplot之前,我先设置环境变量。在安装过程中,出现了问题。 我想删除环境变量。我该如何实现? 问题答案: 是您要查找的命令。

  • 问题内容: 我需要在python脚本中设置一些环境变量,并且我希望从python调用的所有其他脚本(shell脚本)(将是子进程)来查看设置的环境变量。该值为数字。 如果这样做,它会抱怨说1必须是字符串。我也想知道一旦设置它,如何在python(在脚本的后半部分)中读取环境变量。 问题答案: 你可能需要考虑其他方面的代码健壮性; 当你将整数值的变量存储为环境变量时,请尝试 然后为了进行检索,请考虑

  • 问题内容: 我有一个bash脚本,用于设置环境变量并运行命令 现在,我想使用python代替bash,因为我想计算传递给命令的一些参数。 我试过了 和 其次是 但由于未设置LD_LIBRARY_PATH,因此程序总是放弃。 我怎样才能解决这个问题? 感谢帮助! (如果我在调用python脚本之前导出LD_LIBRARY_PATH,则一切正常,但我希望python确定路径并将环境变量设置为正确的值)