12 ответов:
то, что вы ищете в скрипте вызовы
sys.exit(). Аргумент этого метода возвращается в среду в качестве кода выхода.вполне вероятно, что скрипт никогда не вызывает метод exit, и что 0-это код выхода по умолчанию.
необязательный аргумент 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