在python中运行bash命令并处理错误
我试图在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)
子流程
模块,调用函数如下:
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但返回失败返回代码的事情。