Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.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
在python中运行bash命令并处理错误_Python_Linux_Bash_Shell_Subprocess - Fatal编程技术网

在python中运行bash命令并处理错误

在python中运行bash命令并处理错误,python,linux,bash,shell,subprocess,Python,Linux,Bash,Shell,Subprocess,我试图在python程序中运行一组bash脚本命令。我必须一个接一个地运行命令,并处理每个命令的错误和异常。为此,我使用子流程模块,调用函数如下: result = subprocess.call("echo testing", shell = True) 正如预期的那样,该命令打印“testing”,并将result的值设置为0,这意味着该命令已成功执行。或者,在以下命令的情况下: result = subprocess.call("echso testing", shell = True)

我试图在python程序中运行一组bash脚本命令。我必须一个接一个地运行命令,并处理每个命令的错误和异常。为此,我使用
子流程
模块,调用
函数如下:

result = subprocess.call("echo testing", shell = True)
正如预期的那样,该命令打印“testing”,并将
result
的值设置为0,这意味着该命令已成功执行。或者,在以下命令的情况下:

result = subprocess.call("echso testing", shell = True)
它打印“/bin/sh:1:echso:notfound”,并将
result
的值设置为127,这意味着命令
echso
无效。 我的问题是,在哪里可以找到这些错误号的完整列表,以及我可以用于错误处理的描述?到目前为止,我发现了如下退出错误列表:

1: general errors
2: misuse of shell builtins (pretty rare)
126: cannot invoke requested command
127: command not found error
128: invalid argument to “exit”
128+n: fatal error signal “n” (for example, kill -9 = 137)
130: script terminated by Ctrl-C 
这就是全部,或者你知道更多的错误代码和描述吗

result = subprocess.Popen("echo testing", shell = True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
output,err=result.communicate()
if output:
    print "success"
else:
    print err

与查找数字错误不同,您可以直接查找错误并进行处理。

bash手册页有一个部分介绍了您指示的值(尽管我在其中没有看到130)

除此之外,我不知道有什么好标准


有,但我不确定有多少人实际使用它(在linux上也有)。这里给出了一个更详细的列表,下面是关于每个列表的一些有用信息:

根据上表,退出代码为1-2、126-165和255 具有特殊含义,因此应避免 用户指定的退出参数。使用出口127结束脚本将 排除故障时肯定会造成混乱(错误代码是a吗 “未找到命令”或用户定义的命令?)。但是,许多脚本使用 一个出口1,作为一个错误的一般援助。因为退出代码1表示 这么多可能的错误,它在调试中不是特别有用

有人试图将退出状态编号系统化(参见 /Ur/Eng/SySwitth.h),但这是针对C和C++的 程序员。类似的脚本编写标准可能是合适的。 本文作者建议限制用户定义的退出 代码范围为64-113(除0外,表示成功),至 符合C/C++标准。这将分配50个有效代码,并且 使疑难解答脚本更直观

超出范围的退出值可能导致意外的退出代码。出口 大于255的值返回以256为模的退出代码。例如 出口3809给出的出口代码为225(3809%256=225)


这不是问题的答案。这如何回答他在哪里可以找到shell的退出编码器列表的问题?这给了你run命令的标准错误(我相信)这并不总是一回事。@EtanReisner他基本上是想处理错误。我想这是一个很好的方法,但这不是他实际问的问题,这涵盖了一个稍微不同的情况。但是是的,总的来说,这是一个合理的替代建议,但这应该得到更清楚的解释,并说明原因。你的清单差不多是最好的。每个程序都可以自由使用它想要的任何退出代码。除了“非零等于错误”之外,你真的不能依赖任何东西。也就是说,你可以捕获
stderr
,并提供给用户。这可能是重复的,这就是为什么我更喜欢其他解决方案。它至少能处理所有的问题cases@vks不,它不能处理所有的案件。它不会处理不写入stderr但返回失败返回代码的事情。