Коды завершения команд оболочки

kody zaversheniya komand obolochki Системные инструменты параллельного выполнения

Обе функции завершения из модулей 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

Bye os world

[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

Оцените статью
Секреты программирования
Добавить комментарий