我很难用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 环境。
再次感谢所有试图提供帮助的人,如果不是大家的评论,我会放弃的!