Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在mac上使用python中的bash命令:错误127_Python_Bash_Macos - Fatal编程技术网

在mac上使用python中的bash命令:错误127

在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。谷歌搜索告诉我,当命令未知时会发生这种情况 如果我现在在终端中启动这个命令,一切都会正常工作 我是否必

我正在MacOS上使用Python2.7,希望在Python脚本中使用bash命令

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)