Обе функции завершения из модулей sys и os, с которыми мы только что познакомились, принимают аргумент, определяющий код завершения процесса (в функции из модуля sys он необязателен, но в функции из модуля os — необходим). После завершения программы этот код может запрашиваться оболочкой или программой, запустившей сценарий как дочерний процесс. В Linux, например, чтобы получить код завершения последней программы, запрашивается значение переменной оболочки status. По соглашению ненулевое значение указывает, что возникли какие-то проблемы:
[mark@linux]$ python testexit_sys.py
Bye sys world
[mark@linux]$ echo $status
42
[mark@linux]$ python testexit_os.py
[mark@linux]$ echo $status 99
В последовательности команд попутная проверка кодов завершения может использоваться как простая форма связи между программами.
Можно также получить код завершения программы, запущенной другим сценарием. Например, как рассказывалось в главах 2 и 3, при запуске команд оболочки код завершения предоставляется как:
• Значение, возвращаемое функцией os.system
• Значение, возвращаемое методом close объекта os.popen (по историческим причинам для значения None возвращается код 0, что означает отсутствие ошибок)
• Значение, возвращаемое различными интерфейсами в модуле subprocess (например, возвращаемое значение функции call, значение атрибута returnvalue объекта Popen и возвращаемое значение метода wait)
Кроме того, в случае, когда программа запускается приемом ветвления процессов, код завершения можно получить вызовом функций os.wait и os.waitpid в родительском процессе.
Использованная литература:
Марк Лутц — Программирование на Python, 4-е издание, I том, 2011