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

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

 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无效。 我的问题是,我在哪里可以find这些错误号的完整列表,以及可以用于error handling的描述? 到目前为止,我发现了一个退出错误列表如下:

 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 

这是全部,还是你知道更多的错误代码与描述?

bash手册页有一个3.7.5的“退出状态” ,其中涵盖了您所指定的值(虽然我没有看到130)。

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

有sysexits.h,但我不知道有多少人实际使用它(也可在Linux上使用)。

你几乎提到了所有这些。 这里给出一个更详细的列表,下面是关于它们每一个的一些有用的信息:

保留的退出代码

根据上表,退出代码1 – 2,126 – 165和255具有特殊的含义,因此应避免用户指定的退出参数。 如果以127退出脚本结束脚本,在排除故障(错误代码是“未找到命令”或用户定义的错误代码?)时肯定会引起混淆。 但是,许多脚本使用1号出口作为一般的救助措施。 由于退出代码1表示很多可能的错误,所以在调试时并不是特别有用。

已经尝试系统化退出状态编号(请参阅/usr/include/sysexits.h),但这是针对C和C ++程序员的。 一个类似的脚本标准可能是适当的。 本文的作者建议将用户定义的退出代码限制在64 – 113范围内(除了0以外),以符合C / C ++标准。 这将分配50个有效的代码,并使故障排除脚本更直接。

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

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

而不是找到错误的数字,你可以直接找到错误,并处理它们。