Python脚本返回代码244,尽管sys.exit()代码不同

Python脚本返回代码244,尽管sys.exit()代码不同,python,error-handling,exit-code,Python,Error Handling,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 exp

我试图从使用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。

事实上,返回数的大小是一个无符号的短字符,所以是2个字节。因此,可以设置的最大值为255

如果将值设置为大于255,python将返回值的模乘256。
500%256=244,这就是它返回244的原因。

system
exit
是C库中一些最古老的API调用,它们的使用比严格定义的更具进化性。在我的系统上,C调用都使用64位整数<代码>退出屏蔽除最低8位之外的所有位,留下256个可能的返回代码<代码>系统通过外壳,不同的外壳对退出代码的处理方式不同。在某些情况下,如果进程以信号结束,则代码将为128+信号号。在其他情况下,它将是256+信号号


一般来说,您应该坚持退出代码1到127。但是你可以把它们定义为你想要的任何东西。在您的情况下,您可以说退出代码1映射到500,等等。。。。对于其他感兴趣的事情。你可以沟通多达127件事情。它们不一定是错误,退出代码可能在几个成功案例中有所不同,就像HTTP状态代码一样。

在Linux/Bash上,最大退出代码是255。因此,当有人要求向flask web界面返回500个代码时,我应该使用python的“return”命令,希望导入该函数,而不是从命令行调用它?是的。在使用flask时,您不需要担心退出代码。只需按照指南操作即可: