Модуль subprocess позволяет получить код завершения различными способами, как было показано в главах 2 и 3 (значение None в атрибуте returncode указывает, что дочерний процесс еще не завершился):
C:\…\PP4E\System\Exits> python
> >> from subprocess import Popen, PIPE, call
> >> pipe = Popen(‘python testexit_sys.py’, stdout=PIPE)
>>> pipe.stdout.read()
b’Bye sys world\r\n’
>>> pipe.wait()
>>> call(‘python testexit_sys.py’)
Bye sys world
42
>>> pipe = Popen(‘python testexit_sys.py’, stdout=PIPE)
>>> pipe.communicate()
(b’Bye sys world\r\n’, None)
>>> pipe.returncode
42
Модуль subprocess действует аналогично и на Unix-подобных платформах, таких как Cygwin, но в отличие от функции os.popen, код завершения не преобразуется в битовую маску, и поэтому он совпадает с результатом в Windows (обратите внимание, что при использовании в Cygwin и в Unix-подобных системах требуется установить аргумент shell=True, как мы узнали в главе 2, тогда как в Windows этот аргумент требуется установить только для запуска встроенных команд оболочки, таких как dir):
[C:\…\PP4E\System\Exits]$ python
>>> from subprocess import Popen, PIPE, call
>>> pipe = Popen(‘python testexit_sys.py’, stdout=PIPE, shell=True)
>>> pipe.stdout.read()
b’Bye sys world\n’
>>> pipe.wait()
42
>>> call(‘python testexit_sys.py’, shell=True)
Bye sys world
42
Использованная литература:
Марк Лутц — Программирование на Python, 4-е издание, I том, 2011