Python 脚本 returns 代码 244 尽管 sys.exit() 代码不同
Python script returns code 244 despite different sys.exit() code
我正在尝试从使用 os.system 调用多个二进制文件的脚本中传递受控错误代码。然而,尽管检查了 os.system 返回的错误代码并捕获了异常,我还是得到了代码 244 以防任何二进制文件无法 运行.
import os, sys
try:
error_code = os.system('mdkir')
if error_code != 0:
sys.exit(500) # Reaches here when running in Debug mode, as expected
else:
sys.exit(200)
except:
sys.exit(500)
Process finished with exit code 244 # Why not 500?
请建议如何正确执行此操作。此脚本将由基于 flask 的 Web 界面调用。
Linux 中的退出代码是 1 个字节或 8 位。
500 是 0b111110100
,即 9 位。前导 1 被修剪以适合 8 位。
我们还剩下 0b11110100
。那是 244.
事实上,return 数字有一个无符号短整型的大小,即 2 个字节。所以你可以设置的最大值是255.
如果您设置的值大于 255,python 将 return 您的值乘以 256 的模数。
500 % 256 = 244,这就是为什么 returns 244.
system
和 exit
是 C 库中一些最古老的 API 调用,它们的使用比严格定义的更进化。在我的系统上,C 调用都使用 64 位整数。 exit
屏蔽除最低 8 位以外的所有位,为您留下 256 个可能的 return 代码。 system
通过 shell 并且不同的 shell 以不同方式处理退出代码。在某些情况下,如果进程以信号结束,则代码将为 128 + 信号编号。在其他情况下,它将是 256 + 信号编号。
通常,您应该坚持使用退出代码 1 到 127。但是您可以将它们定义为任何您想要的。在您的情况下,您可以说退出代码 1 映射到 500,等等……对于其他感兴趣的事情。您最多可以传达 127 件事。它们不一定是错误,退出代码在几个成功案例之间可能不同,就像 HTTP 状态代码一样。
我正在尝试从使用 os.system 调用多个二进制文件的脚本中传递受控错误代码。然而,尽管检查了 os.system 返回的错误代码并捕获了异常,我还是得到了代码 244 以防任何二进制文件无法 运行.
import os, sys
try:
error_code = os.system('mdkir')
if error_code != 0:
sys.exit(500) # Reaches here when running in Debug mode, as expected
else:
sys.exit(200)
except:
sys.exit(500)
Process finished with exit code 244 # Why not 500?
请建议如何正确执行此操作。此脚本将由基于 flask 的 Web 界面调用。
Linux 中的退出代码是 1 个字节或 8 位。
500 是 0b111110100
,即 9 位。前导 1 被修剪以适合 8 位。
我们还剩下 0b11110100
。那是 244.
事实上,return 数字有一个无符号短整型的大小,即 2 个字节。所以你可以设置的最大值是255.
如果您设置的值大于 255,python 将 return 您的值乘以 256 的模数。 500 % 256 = 244,这就是为什么 returns 244.
system
和 exit
是 C 库中一些最古老的 API 调用,它们的使用比严格定义的更进化。在我的系统上,C 调用都使用 64 位整数。 exit
屏蔽除最低 8 位以外的所有位,为您留下 256 个可能的 return 代码。 system
通过 shell 并且不同的 shell 以不同方式处理退出代码。在某些情况下,如果进程以信号结束,则代码将为 128 + 信号编号。在其他情况下,它将是 256 + 信号编号。
通常,您应该坚持使用退出代码 1 到 127。但是您可以将它们定义为任何您想要的。在您的情况下,您可以说退出代码 1 映射到 500,等等……对于其他感兴趣的事情。您最多可以传达 127 件事。它们不一定是错误,退出代码在几个成功案例之间可能不同,就像 HTTP 状态代码一样。