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

Программы и процессы

Когда вы запускаете отдельную программу, ваша операционная система создает один

процесс. Он использует системные ресурсы (центральный процессор, память, место

на диске) и структуры данных в ядре операционной системы (файлы и сетевые

288

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

соединения, статистика использования и т. д.). Процесс изолирован от других про-

цессов — он не может видеть, что делают другие процессы, или мешать им.

Операционная система отслеживает все запущенные процессы, давая каждому

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

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

увидеть состояние своих процессов с помощью графического интерфейса вроде

Mac’s Activity Monitor (OS X) или Диспетчера задач в Windows.

Вы также можете получать данные о процессах собственных программ. Модуль

стандартной библиотеки os помогает получить некоторую системную информацию.

Например, следующие функции позволяют получить идентификатор процесса

и текущую рабочую папку запущенного интерпретатора Python:

>>> import os

>>> os.getpid()

76051

>>> os.getcwd()

'/Users/williamlubanovic'

А эти — мои идентификаторы пользователя и группы:

>>> os.getuid()

501

>>> os.getgid()

20

Создаем процесс с помощью модуля subprocess

Все программы, с которыми вы сталкивались до этого момента, представляли собой

отдельные процессы. Вы можете запускать и останавливать остальные существу-

ющие программы с помощью Python, используя модуль subprocess. Если вы хоти-

те просто запустить другую программу в оболочке и получить результат ее работы

(стандартный отчет о работе и отчет об ошибках), используйте функцию getoutput().

В этом примере мы получим результат работы программы date системы Unix:

>>> import subprocess

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

>>> ret

'Sun Mar 30 22:54:37 CDT 2014'

Вы не получите результат, пока процесс не завершится. Если вам нужно вызвать

что-то, что может занять много времени, обратитесь к разделу «Конкуренция»

главы 11. Поскольку аргументом функции getoutput() является строка, представ-

ляющая собой команду оболочки, вы можете включить аргументы, каналы, пере-

направление ввода/вывода и т. д.:

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

>>> ret

'Mon Mar 31 03:55:01 UTC 2014'

Программы и процессы

289

Передача строки-отчета команде wc насчитывает одну строку, шесть «слов»

и 29 символов: