Python exit(n) возвращает значение n * 256. Как вернуть требуемый код?

Работаю в Linux. Имею два скрипта на Python. Скрипт t2.py вызывает t1.py и печатает результат его выполнения. Только почемуто результат получается помноженный на 256. Почему так происходит и как вернуть заданный код выполнения скрипта?

Скрипт t1.py

from sys import argv

code = int(argv[1])
print('Parsed code is %d'%(code))
exit(code)

Скрипт t2.py

import os
from sys import argv

res = os.system('python t.py %s'%(argv[1]))
print('Result is %d'%(res))

Результат выполнения скрипта t2.py

$ python t2.py 0
Parsed code is 0
Result is 0
$ python t2.py 1
Parsed code is 1
Result is 256
$ python t2.py 2
Parsed code is 2
Result is 512
$ python t2.py 256
Parsed code is 256
Result is 0

Ответы (1 шт):

Автор решения: Be3y4uu_K0T

Похожий вопрос на англ. stackoverflow

Потому что os.system возвращает не exitcode, а waitstatus. Чтобы преобразовать его в код возврата, вам нужно использовать os.waitstatus_to_exitcode (или os.WEXITSTATUS для более старых версий Python).

Из справки про os.system

On Unix, the return value is the exit status of the process encoded in the format specified for wait(). Note that POSIX does not specify the meaning of the return value of the C system() function, so the return value of the Python function is system-dependent.

Перевод:

В Unix возвращаемое значение-это состояние выхода процесса, закодированное в формате, указанном для wait(). Обратите внимание, что POSIX не указывает значение возвращаемого значения функции C system(), поэтому возвращаемое значение функции Python зависит от системы.

→ Ссылка