Коды выхода в Python



Я получил сообщение, что script xyz.py returned exit code 0. Что это значит?



Что означают коды выхода в Python? Сколько их там? Какие из них важны?

2750   12  

12 ответов:

то, что вы ищете в скрипте вызовы sys.exit(). Аргумент этого метода возвращается в среду в качестве кода выхода.

вполне вероятно, что скрипт никогда не вызывает метод exit, и что 0-это код выхода по умолчанию.

С документация sys.exit:

необязательный аргумент arg может быть целое состояние выхода (по умолчанию ноль), или другой тип объекта. Если это целое число, ноль считается " успешным окончанием" и любое ненулевое значение считается "анормалное прекращение" раковинами и подобный. Большинство систем требуют этого быть в диапазоне 0-127, и производить неопределенные результаты в противном случае. Некоторые системы Конвенции для присвоение конкретных значений конкретные коды выхода, но это как правило, недоразвиты; в Unix программы обычно используют 2 для команды ошибки синтаксиса строки и 1 для всех остальных виды ошибок.

один пример, где коды выхода используются в сценариях оболочки. В bash, вы можете проверить специальную переменную $? для последнего состояния выхода:

me@mini:~$ python -c ""; echo $?
0
me@mini:~$ python -c "import sys; sys.exit(0)"; echo $?
0
me@mini:~$ python -c "import sys; sys.exit(43)"; echo $?
43

лично я стараюсь использовать коды выхода, которые я нахожу в /usr/include/asm-generic/errno.h (на Linux), но я не знаю, если это правильно.

есть errno модуль, который определяет стандартные коды выхода:

например, доступ запрещен код ошибки 13:

import errno, sys

if can_access_resource():
    do_something()
else:
    sys.exit(errno.EACCES)

для записи можно использовать стандартные коды выхода POSIX defined здесь.

пример:

import sys, os

try:
    config()
except:
    sys.exit(os.EX_CONFIG) 
try:
    do_stuff()
except:
    sys.exit(os.EX_SOFTWARE)
sys.exit(os.EX_OK) # code 0, all ok

коды выхода 0 обычно означают: "здесь все в порядке."Однако, если программист сценария не следовал конвенции, вам, возможно, придется проконсультироваться с источником, чтобы увидеть, что это значит. Обычно ненулевое значение возвращается в виде кода ошибки.

команды операционной системы кодов выхода. Ищите коды выхода linux чтобы увидеть некоторые материалы по этому вопросу. Оболочка использует коды выхода, чтобы решить, если программа работала, были проблемы или не удалось. Есть некоторые усилия по созданию стандартных (или, по крайней мере, часто используемых) кодов выхода. Смотрите это Расширенный Скрипт проводки.

Если вы хотите портативно использовать стандартные коды выхода POSIX см. exitstatus пакет на PyPI.

установить пакет:

pip install exitstatus

использовать в коде:

import sys
from exitstatus import ExitStatus

sys.exit(ExitStatus.success)

коды выхода имеют значение только по назначению автора сценария. Традиция Unix заключается в том, что код выхода 0 означает "успех", все остальное-неудача. Единственный способ убедиться, что коды выхода для данного скрипта означают, - это изучить сам скрипт.

коды выхода во многих языках программирования до программистов. Поэтому вам нужно посмотреть исходный код вашей программы (или руководство). Ноль обычно означает"все прошло хорошо".

ответ "зависит от того, что означает нулевой код выхода"

однако в большинстве случаев это означает "все в порядке"


мне нравится POSIX:

Итак, на оболочке я бы набрал:

python script.py && echo 'OK' || echo 'Not OK'

Если мой скрипт python вызывает sys.exit(0) оболочка возвращает 'OK'

Если мой скрипт python вызывает sys.exit(1) (или любое ненулевое целое число), оболочка возвращает 'Not OK'

Это ваша работа, чтобы получить умный с оболочкой, и прочитайте документацию (или источник) для вашего сценария, чтобы увидеть, что означают коды выхода.

чтобы разрешить выполнение обработчиков исключений и других вещей, я рекомендую чистое завершение работы с exit(0) встроенные, а не с помощью sys.exit() что резко завершает процесс.

Я рекомендую чистое завершение работы со встроенным выходом (0), а не с помощью sys.exit ()

Я не уверен, что это хороший совет.

сама упомянутая документация гласит:

модуль сайта (который импортируется автоматически при запуске, за исключением параметра командной строки-S) добавляет несколько констант во встроенное пространство имен. Они полезны для интерактивной оболочки интерпретатора и не следует использовать в программах.

затем:

выход(код=нет)

объекты, которые при печати печатают сообщение типа "используйте quit () или Ctrl-D (т. е. EOF) для выхода", а при вызове вызывают SystemExit с указанным кодом выхода.

Если мы сравним его с sys.exit () документация, он использует тот же механизм, который поднимает SystemExit исключения.

Comments

    Ничего не найдено.