为什么 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 环境。
再次感谢所有帮助过我的人,要不是大家的评论我都放弃了!
我在使用 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 环境。
再次感谢所有帮助过我的人,要不是大家的评论我都放弃了!