在mac上使用python中的bash命令:错误127
我正在MacOS上使用Python2.7,希望在Python脚本中使用bash命令在mac上使用python中的bash命令:错误127,python,bash,macos,Python,Bash,Macos,我正在MacOS上使用Python2.7,希望在Python脚本中使用bash命令 command = "someProgram --option1 value 1 --option2 value 2" 为了运行它,我必须在我的bash_配置文件中包含这个程序的路径。到目前为止,我测试了: os.system(command) 及 两者都不起作用。后者抛出错误127,第一个只返回32512。谷歌搜索告诉我,当命令未知时会发生这种情况 如果我现在在终端中启动这个命令,一切都会正常工作 我是否必
command = "someProgram --option1 value 1 --option2 value 2"
为了运行它,我必须在我的bash_配置文件中包含这个程序的路径。到目前为止,我测试了:
os.system(command)
及
两者都不起作用。后者抛出错误127,第一个只返回32512。谷歌搜索告诉我,当命令未知时会发生这种情况
如果我现在在终端中启动这个命令,一切都会正常工作
我是否必须包含python可以找到此命令的内容?为什么会出现这种行为?使用
shell=True
命令必须是字符串
子流程。检查调用(命令,shell=True)
where命令的类型为
str
谢谢您的帮助。最终的解决方案有点愚蠢。我通过anaconda GUI启动了spyder。如果我这样做,上面的代码将不起作用
如果我直接通过控制台运行这个,或者通过控制台启动spyder,一切都很好。加载spyder时,bash_配置文件似乎没有加载,但需要控制台执行此操作命令是什么?命令是什么?如果
某个程序
不在您的路径中,那么,您就在那里了。和命令。拆分(“”
将不起作用,因为当您的值中可以有空格时,这些原因应该是显而易见的。如果您使用命令=['someProgram'、'--option1'、'value 1'、'--option2'、'value 2']
与子进程一起使用命令。请检查调用(命令)
(无shell=True
),您将消除一整类解析问题。让它成为/full/qualified/path/to/someProgram
以消除可能的路径问题。顺便问一下,当你说“bash命令”时,你真的是指“bash命令”吗?因为如果您给它一个与/bin/bash
而不是/bin/sh
一起工作的命令,那么有一个明显的解释。类似地,如果它是在~/.bashrc
或类似文件中定义的shell函数或别名。根据讨论:“如果args是序列,则第一项指定命令字符串,任何附加项都将被视为shell本身的附加参数。”,程序的参数将作为参数传递给shell。可能是选项值的引号问题。尝试使用command=“”“someProgram--option1='value 1'--option2='value 2'”“为什么要经历所有这些麻烦,而不是传递一个合适的argv数组,以避免出现shell(以及随之而来的所有潜在bug--对您的安全性的注入攻击、shell休克式环境攻击、引用bug等)?我同意,虽然有时确实需要一个shell,因为程序希望在shell中运行,但如果没有shell,程序就会中断。总的来说,我同意,尽管在有些情况下这是不合适的。
subprocess.check_call(command.split(" "),shell=True)