Почему значение, возвращаемое скриптом python, изменяется оболочкой? - PullRequest
0 голосов
/ 31 октября 2018

Мой питонскрипт выглядит так

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

А это сценарий оболочки

python3 pythonScript.py
echo $?

Он печатает 146 . Как 402 сопоставляется с 146? Некоторые другие пары, такие как (402, 146), (100,0), (0, 0), (56, 0) и т. Д.

Может ли скрипт python вернуть значение для оболочки таким образом, и является ли ? правильной переменной для захвата этого?

Версия моей машины такая, если это важно.

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 голосов
/ 31 октября 2018

Это не оболочка. Интерфейс системного вызова поддерживает только 8-битное число без знака; поэтому максимальное значение, которое может быть передано, составляет 255.

То же самое произошло бы, если бы вы написали программу на C, чья int main() пыталась return(402);, и вызвали ее из другой программы на C с exec, без какой-либо оболочки.

0 голосов
/ 31 октября 2018

в bash, код выхода виден только самые младшие 8 бит, младшие 8 бит из 402 - 146:

>>> 402 & 0b11111111
146
...