Получение кода завершения с помощью os. system и os. popen

poluchenie koda zaversheniya s pomoshhju os system i os popen Системные инструменты параллельного выполнения

Рассмотрим сначала случай с командами оболочки — в операционной системе Linux запускаются программы из примеров 5.15 и 5.16, производится чтение вывода этих сценариев через каналы и получение кодов завершения:

[mark@linux]$ python

>   >> import os

>   >> pipe = os.popen(‘python testexit_sys.py’)

>   >> pipe.read()

‘Bye sys world\012’

>>> stat = pipe.close() # возвращает код завершения

>>> stat

10752

>>> hex(stat)

‘0x2a00’

>   >> stat >> 8 # извлекает код завершения из битовой маски

42

>   >> pipe = os.popen(‘python testexit_os.py’)

>   >> stat = pipe.close()

>   >> stat, stat >> 8

(25344, 99)

В версии Cygwin Python под Windows этот пример действует точно так же. При использовании функции os.popen в Unix-подобных системах по причинам, которые мы не будем здесь рассматривать, код завершения помещается в определенные битовые позиции возвращаемого значения.

Код действительно находится там, но чтобы его увидеть, нужно сдвинуть результат вправо на восемь разрядов. Код завершения команд, выполняемых с помощью функции os.system, можно получить с помощью библиотечной функции:

>  >> stat = os.system(‘python testexit_sys.py’)

Bye sys world

>  >> stat, stat >> 8 (10752, 42)

>  >> stat = os.system(‘python testexit_os.py’)

Bye os world

>  >> stat, stat >> 8

(25344, 99)

Все эти приемы действуют и в стандартной версии Python для Windows, однако в этой операционной системе код завершения уже не является битовой маской (проверяйте значение sys.platform, если ваша программа должна работать на обеих платформах):

C:\\PP4E\System\Exits> python

>  >> os.system(‘python testexit_sys.py’)

Bye sys world 42

>  >> os.system(‘python testexit_os.py’)

Bye os world

99

>  >> pipe = os.popen(‘python testexit_sys.py’)

>  >> pipe.read()

‘Bye sys world\n’

>  >> pipe.close()

42

>>> 

>  >> os.popen(‘python testexit_os.py’).close() 99

Использованная литература:
Марк Лутц — Программирование на Python, 4-е издание, I том, 2011

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