为什么python脚本返回的值会被shell修改?

时间:2018-10-31 06:55:05

标签: bash shell linux-kernel return python-3.5

我的python脚本如下

#!/usr/bin/python3
#File Name: pythonScript.py
from sys import exit
if '__name__'=='__main__':exit(402)

这是shell脚本

python3 pythonScript.py
echo $?

它显示 146 。 402如何映射到146?诸如此类的其他一些对是(402、146),(100,0),(0、0),(56、0)等。

python脚本可以通过这种方式将值返回给shell吗,?是捕获此值的正确变量吗?

如果这很重要,我的机器版本就是这个。

4.4.0-89-generic #112-Ubuntu SMP Mon Jul 31 19:38:41 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

2 个答案:

答案 0 :(得分:1)

在bash中,退出代码仅可见最低的8位,402的低8位是146:

>>> 402 & 0b11111111
146

答案 1 :(得分:0)

不是外壳。系统调用接口仅容纳一个无符号的8位数字。因此可以传达的最大值是255。

如果您编写了一个{} {1}}试图访问int main()的C程序,然后又用return(402);从另一个C程序中调用了它,而没有任何shell,则会发生同样的事情。