Bash 为什么python脚本返回的值会被shell修改?
我的pythonscript看起来像这样Bash 为什么python脚本返回的值会被shell修改?,bash,shell,linux-kernel,return,python-3.5,Bash,Shell,Linux Kernel,Return,Python 3.5,我的pythonscript看起来像这样 #!/usr/bin/python3 #File Name: pythonScript.py from sys import exit if '__name__'=='__main__':exit(402) 这是shell脚本 python3 pythonScript.py echo $? 它打印146。402如何映射到146?像这样的一些其他对是(402146),(100,0),(0,0),(56,0)等等 python脚本能否以这种方式向shel
#!/usr/bin/python3
#File Name: pythonScript.py
from sys import exit
if '__name__'=='__main__':exit(402)
这是shell脚本
python3 pythonScript.py
echo $?
它打印146。402如何映射到146?像这样的一些其他对是(402146),(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
在bash中,退出代码仅在最低8位可见,402的低8位为146:
>>> 402 & 0b11111111
146
这不是贝壳。系统调用接口仅容纳一个无符号8位数字;因此,可以通信的最大值是255
如果编写一个C程序,其
intmain()
试图返回(402),也会发生同样的情况
并且您从另一个C程序调用它,使用exec
,没有任何shell。您的问题已经有了答案,例如,范围0..255之外的任何值都被处理为模256(退出状态存储在8位值中)。402%256=146python-c'exit(100)
按预期为我生成100 in$?
。你问题中的其他“配对”似乎不正确(或者我误解了你的意思)。谢谢你的修复。现在这并不不准确,但仍然模糊地暗示着外壳在其中起着作用;没有。查看我的答案。@tripleee是的,等待*家庭系统调用执行截断。@tripleee事实上,在FreeBSD下,使用waitid
call,您可以获得完整的32位退出状态。