为什么 PATH args to subprocess.run() 在 Linux 和 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 列表转换为字符串",这对我来说似乎是一个很好的解决方案,但我很好奇为什么 MacOS 上的 Python 似乎没有从环境中继承PATH,而它在 Linux 上显然是这样做的。任何人都可以为我澄清这一点,和/或指出我一些相关的文档吗?

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

在今天之前我从来不知道这一点,但是.bash_profile只来源于登录 shell,所以我想 Python 会生成一个全新的非登录 shell,并且不会继承它运行的当前 shell 环境。

再次感谢所有试图提供帮助的人,如果不是大家的评论,我会放弃的!

最新更新