Вопрос

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

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

Это было полезно?

Решение

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

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

Другие советы

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

  

Необязательный аргумент arg может быть   целое число, дающее статус выхода   (по умолчанию ноль) или другой тип   объекта. Если это целое число, ноль   считается & # 8220; успешное завершение & # 8221;   и любое ненулевое значение считается   & # 8220; аварийное завершение & # 8221; снарядами и   подобное, аналогичное, похожее. Большинство систем требуют, чтобы   быть в диапазоне 0-127, и производить   неопределенные результаты в противном случае. Немного   системы имеют соглашение для   присвоение конкретных значений   конкретные коды выхода, но это   как правило, недоразвит; Юникс   программы обычно используют 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 здесь.

Пример:

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 & amp; & amp; эхо 'ОК' || эхо "не в порядке"

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

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

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

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

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

Сама упомянутая документация читает:

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

Тогда:

выход(код=Отсутствует)

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

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

Коды выхода на многих языках программирования предназначены для программистов. Таким образом, вы должны посмотреть на исходный код вашей программы (или руководство). Ноль обычно означает «все прошло хорошо».

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top