Простой Python. современный стиль программирования - читать онлайн бесплатно полную версию книги . Страница 223

>>> ret = subprocess.getoutput('date -u | wc')

>>> ret

' 1 6 29'

Метод check_output() принимает список команд и аргументов. По умолчанию

он возвращает объект типа bytes, а не строки и не использует оболочку:

>>> ret = subprocess.check_output(['date', '-u'])

>>> ret

b'Mon Mar 31 04:01:50 UTC 2014\n'

Чтобы показать статус выхода другой программы, используйте функцию

getstatusoutput(), которая возвращает кортеж, содержащий код статуса и результат

работы:

>>> ret = subprocess.getstatusoutput('date')

>>> ret

(0, 'Sat Jan 18 21:36:23 CST 2014')

Если вам нужен не результат работы программы, а только код, используйте

функцию call():

>>> ret = subprocess.call('date')

Sat Jan 18 21:33:11 CST 2014

>>> ret

0

(В системах семейства Unix 0 обычно является статусом, сигнализирующим об

успехе.)

Эти дата и время были выведены на экран, но не получены нашей программой.

Поэтому мы сохраняем код возврата как ret.

Вы можете запускать программы с аргументами двумя способами. Первый за-

ключается в том, чтобы разместить их в одной строке. Для примера возьмем ко-

манду date -u, которая выводит на экран дату и время в UTC (о UTC мы поговорим

немного позже):

>>> ret = subprocess.call('date -u', shell=True)

Tue Jan 21 04:40:04 UTC 2014

Вам нужно использовать значение shell=True, чтобы распознать команду date -u,

разбив ее на отдельные строки и, возможно, расширяя любые символы подстанов-

ки вроде * (в нашем примере мы их не использовали).

Во втором варианте мы создаем список аргументов, поэтому нам не нужно вы-

зывать оболочку:

>>> ret = subprocess.call(['date', '-u'])

Tue Jan 21 04:41:59 UTC 2014

290

Глава 10. Системы

Создаем процесс

с помощью модуля multiprocessing

Вы можете запустить функцию Python как отдельный процесс или даже несколь-

ко независимых процессов с помощью модуля multiprocessing. Рассмотрим корот-

кий пример, который не делает ничего полезного. Сохраните его под именем mp.py,

а затем запустите его, введя команду python mp.py:

import multiprocessing

import os

def do_this(what):

whoami(what)

def whoami(what):