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

时间:2014-12-05 14:37:38

标签: python linux bash shell subprocess

我正在尝试在python程序中运行一组bash脚本命令。我必须逐个运行命令并处理每个命令的错误和异常。为此,我使用subprocess模块和call函数如下:

result = subprocess.call("echo testing", shell = True)

正如预期的那样,此命令打印“testing”并将result的值设置为0,表示命令已成功执行。或者,在以下命令的情况下:

result = subprocess.call("echso testing", shell = True)

打印“/ bin / sh:1:echso:not found”并将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 

这就是全部,或者您是否知道更多带描述的错误代码?

3 个答案:

答案 0 :(得分:0)

bash手册页有一个3.7.5 Exit Status部分,其中包含您指出的值(虽然我不会在那里看到130)。

除此之外,我不知道有任何好的标准。

sysexits.h但我不确定有多少人真正使用它(也可以在linux上使用)。

答案 1 :(得分:0)

你几乎提到了所有这些。给出了一个更精细的列表here,这里有一些关于每个列表的有用信息:

reserved exit codes

  

根据上表,退出代码1 - 2,126-165和255   具有特殊意义,因此应该避免   用户指定的退出参数。结束退出127的脚本会   在故障排除时肯定会引起混淆(是错误代码a   "命令未找到"或用户定义的?)。但是,很多脚本都使用   退出1作为一般的挽救错误。由于退出代码1表示   这么多可能的错误,在调试时并不是特别有用。

     

尝试将退出状态编号系统化(参见   /usr/include/sysexits.h),但这适用于C和C ++   程序员。类似的脚本标准可能是合适的。   本文档的作者建议限制用户定义的退出   代码范围为64 - 113(除了0,成功),至   符合C / C ++标准。这将分配50个有效代码,和   使故障排除脚本更直接。

     

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

答案 2 :(得分:-1)

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

您可以直接找到错误并处理错误,而不是向数字发现错误。