我正在尝试在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
这就是全部,或者您是否知道更多带描述的错误代码?
答案 0 :(得分:0)
bash手册页有一个3.7.5 Exit Status部分,其中包含您指出的值(虽然我不会在那里看到130)。
除此之外,我不知道有任何好的标准。
有sysexits.h但我不确定有多少人真正使用它(也可以在linux上使用)。
答案 1 :(得分:0)
你几乎提到了所有这些。给出了一个更精细的列表here,这里有一些关于每个列表的有用信息:
根据上表,退出代码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
您可以直接找到错误并处理错误,而不是向数字发现错误。