>>> 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):