Відповіді:
Те, що ви шукаєте в сценарії, - це дзвінки sys.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), але не знаю, чи правильно це робити.
grep
ця тенденція порушується, виходячи з того, 1
коли жоден рядок не збігається, і 2
за фактичними помилками. Дякую, Сталман.
Для запису ви можете використовувати стандартні коди виходу 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
exitstatus
Пакет PyPI.
Існує errno
модуль, який визначає стандартні коди виходу:
Наприклад, у дозволі відхилено код помилки 13 :
import errno, sys
if can_access_resource():
do_something()
else:
sys.exit(errno.EACCES)
errno
і errno.h ), але код стану виходу 77 ( в відповідно до os
і sysexits.h ). Програми, які випромінюють перші, є нестандартними ( фактично вель-юре ) і не будуть грати добре з іншими, які справедливо очікують на останнє.
Вихідні коди 0 зазвичай означають "тут нічого поганого". Однак якщо програміст сценарію не дотримувався конвенції, вам, можливо, доведеться звернутися до джерела, щоб побачити, що це означає. Зазвичай ненульове значення повертається як код помилки.
Відповідь «Залежить від того, що означає нульовий код виходу»
Однак у більшості випадків це означає "Все гаразд"
Мені подобається POSIX:
Отже, на оболонці я б набрав:
python script.py && echo 'OK' || echo 'Not OK'
Якщо мій скрипт python викликає sys.exit(0)
оболонку, повертається "ОК"
Якщо мій скрипт python викликає sys.exit(1)
(або будь-яке ненульове ціле число), оболонка повертає "Не в порядку"
Ваша робота - розібратися з оболонкою та прочитати документацію (або джерело) для свого сценарію, щоб побачити, що означають вихідні коди.
Команди операційної системи мають коди виходу. Шукайте коди виходу linux, щоб побачити деякі матеріали з цього приводу. Оболонка використовує вихідні коди, щоб вирішити, чи працювала програма, мали проблеми чи не працювали. Докладаються певні зусилля для створення стандартних (або принаймні часто використовуваних) кодів виходу. Дивіться цю розширену публікацію сценарію оболонки .
Я рекомендую чисте відключення з вбудованим виходом (0), а не використанням sys.exit ()
Я не впевнений, чи це хороша порада.
Сама згадана документація говорить:
Модуль сайту (який імпортується автоматично під час запуску, за винятком випадків, коли задано параметр командного рядка -S) додає кілька констант до вбудованого простору імен. Вони корисні для оболонки інтерактивного перекладача і не повинні використовуватися в програмах .
Тоді:
вихід (код = немає)
Об'єкти, які під час друку надрукують повідомлення типу "Використовувати quit () або Ctrl-D (тобто EOF) для виходу", а коли викликається, підніміть SystemExit із зазначеним кодом виходу.
Якщо порівняти його з документацією на sys.exit () , він використовує той самий механізм, який створює SystemExit
виняток.
Якщо ви хочете портативно використовувати стандартні коди виходу POSIX , дивіться exitstatus
пакет на PyPI.
Встановіть пакет:
$ pip install exitstatus
Використовуйте у своєму коді:
import sys
from exitstatus import ExitStatus
sys.exit(ExitStatus.success)
Вихідні коди мають значення лише те, що призначено автором сценарію. Традиція Unix полягає в тому, що код виходу 0 означає «успіх», а все інше - невдачу. Єдиний спосіб бути впевненим, що означають вихідні коди для даного сценарію, - це вивчити сам сценарій.
Щоб дозволити виконувати обробці винятків та інші речі, я рекомендую чисте відключення з exit(0)
вбудованим, а не використання, sys.exit()
яке різко припиняє процес.
SystemExit
Здається, піднімаються в будь-якому випадку.
os._exit
, обидва ніби піднімають SystemExit
.
sys.exit()
робить відключення чисто, точно як exit()
. Вони обидва роблять те ж саме: ростити SystemExit
виняток. Власне, exit()
призначений для інтерактивних сесій, а не сценаріїв, тому концептуально sys.exit()
є зазначеним. Ви можете збивати з пантелику os._exit()
, це те, що різко припиняється.