为什么python的Popen无法在Mac OS X上传递环境变量?

用户名

我正在编写一个程序,该程序需要生成一个新的终端窗口并在此新的终端窗口中启动服务器(将环境变量传递给子进程)。

我已经能够在Windows 10和Linux上实现这一目标,而没有太多麻烦,但是在Mac OS X(大苏尔)上,环境变量没有传递给子进程。这是捕获我想要实现的行为的示例代码片段:

#!/usr/bin/python3
import subprocess
import os
command = "bash -c 'export'"
env = os.environ.copy()
env["MYVAR"] = "VAL"

process = subprocess.Popen(['osascript', '-e', f"tell application \"Terminal\" to do script \"{command}\""], env=env)

不幸的是,MYVAR在导出的环境变量中不存在。

有什么想法,如果我在这里做错了吗?

这是python标准库(“子进程”模块)中的错误吗?

编辑-谢谢Ben Paterson(以前我的示例代码有一个错误)-我已经更新了代码示例,但仍然存在相同的问题。

编辑-我进一步缩小了范围。subprocess.Popen在执行以下操作时应该执行的操作:

command = "bash -c 'export > c.txt'"
process = subprocess.Popen(shlex.split(command, posix=1), env=env)

但是,当我尝试使用osascript -e ...包装该命令(以在新的终端窗口中生成它)时,环境变量“ MYVAR”没有出现在c.txt文件中。

command = "bash -c 'export > c.txt'"
process = subprocess.Popen(['osascript', '-e', f"tell application \"Terminal\" to do script \"{command}\""], env=env)
本杰明·彼得森

dict.update返回None,因此OP代码等效于传递env=Nonesubprocess.Popen写:

env = os.environ.copy()
env["MYVAR"] = "VAL"
subprocess.Popen(..., env=env)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Mac OS X中的环境变量

在Mac OS X Lion上设置环境变量

Mac OS X 10.9-设置永久环境变量

在Mac OS X上设置环境变量

Mac OS X使“旧”环境变量保持不变

在Mac OS X上设置永久环境变量

在Mac OS X Sierra上设置环境变量?

在Mac OS X High Sierra 10.13.2中为spark / hadoop / java / python等设置环境变量

如何在Mac OS X 10.9上设置JAVA_HOME环境变量?

在Mac OS X上设置ANDROID_HOME环境变量

无法使用OS Python获取环境变量

为什么getopt无法在python 2.7.5 Mac OS X上运行

如何在Python中读取* new * OS环境变量?

Python,Pycharm-os.environ中缺少环境变量

为什么看不到通过“ os.environ []”设置的环境变量

在Shell脚本OS X中设置环境变量

在OS X上为LLVM设置环境变量

在OS X上运行Docker容器时如何将主机IP作为环境变量传递

为什么[fopen()/ open()/ fstream file]在Mac OS X上无法打开文件?

无法使用带有os.environ.get的PowerShell读取设置的环境变量

无法将环境变量传递给Docker

避免将环境变量传递给python脚本

如何从OS环境变量创建字典?

用于测试的抽象OS环境变量

为什么Mac OS X上的Python time.time()和time.clock()有差异?

cmd执行但python os.popen和subprocess.call和subprocess.popen和os.system无法执行,为什么?

无法在X会话启动时导出环境变量

为什么\ w在Mac OS X PHP环境中匹配非英语字符?

为什么Mac OS X上的某些(全部?)文件更大?