为什么 subprocess.run() 的 PATH 参数不能在 Linux 和 MacOS 之间移植?

Why are PATH args to subprocess.run() not portable between Linux and MacOS?

我在使用 subprocess.run() 方法在 Linux 和 MacOS 之间进行移植时遇到困难。

在 Linux 上,只要 someCommand 在我的 PATH 中(在 ~/.bashrc 中设置),下面的命令就可以正常工作。

subprocess.run(["someCommand", "foo", "bar"])

然而,在 MacOS 上,相同的命令不会 运行,即使 someCommand 在我的 PATH 中。相反,我收到如下错误:

FileNotFoundError: [Errno 2] No such file or directory: 'someCommand'

StackExchange 上还有许多其他答案说“只需使用 shell=True 并将 args 列表转换为字符串”,这对我来说似乎是一个很好的解决方案,但我很好奇为什么 Python 在 MacOS 上似乎没有从环境中继承 PATH,而在 Linux 上显然是这样。谁能帮我澄清一下,and/or 给我指点一些相关文档?

我的 Mac 的问题是我的 PATH 中的所有可执行文件都是在 ~/.bash_profile 而不是 ~/.bashrc 中声明的。

今天之前我不知道这个,但是 .bash_profile 仅在登录 shell 时获得,所以我猜 Python 会产生一个全新的 non-login shell 并且不继承 运行 所在的当前 shell 环境。

再次感谢所有帮助过我的人,要不是大家的评论我都放弃了!