Процесс — это имя работающей программы. Память, списки файлов и счетчик программ, учитывающий выполняемые инструкции, и стек вызовов, сохраняющий локальные переменные, — все это часть состояния системы каждого процесса. Процесс обычно обрабатывает операторы один за другим в единой последовательности потока команд, известной как основной поток процесса. Программа делает только одну вещь в любой момент времени. На нашем компьютере всегда запущены подпроцессы. Каждое действие, которое мы предпринимаем на нашем компьютере, влечет за собой активацию подпроцесса. Даже если мы создаем базовую программу «hello world» на Python. Даже если вы какое-то время занимаетесь программированием, вы можете не знать концепции подпроцесса. В этой статье будут рассмотрены принципы подпроцесса, а также то, как использовать стандартную библиотеку подпроцесса Python.
Обычно используются модули os.fork(), subprocess.Popen() и другие. Подпроцессы, с другой стороны, работают как совершенно отдельные объекты, каждый со своим уникальным состоянием системы и основным потоком операций. Вы можете использовать модуль Subprocess Python для создания новых процессов. После этого он может подключиться к обычным потокам ввода/вывода/ошибки и получить код возврата. Например, подпроцесс может запускать любую команду Linux из сценария. В зависимости от ситуации либо получите результат, либо просто проверьте правильность выполнения операции. Обратите внимание, что синтаксис модуля подпроцесса изменился в Python 3.5.
В первом примере вы можете понять, как получить код возврата из процесса. Код показывает, что мы сначала импортировали модуль подпроцесса. После этого мы вызвали метод Popen. Возвращаемое значение, по сути, представляет собой объект открытого файла, присоединенный к каналу. В зависимости от режима w и r он может быть записан или прочитан. «r» — режим по умолчанию. Некоторые программы используют аргументы bufsize, почти идентичные аналогичным аргументам встроенной функции open(). Разница в том, что когда статус выхода равен нулю, и в этом случае возвращается None, статус выхода команды доступен как результат возврата метода close() файлового объекта. Мы хотели получить вывод команды, поэтому использовали параметр stdout со значением subprocess. Как видите, PIPE используется во второй строке кода после импорта подпроцесса.
import subprocess p = subprocess.Popen(["echo", "Welcome"], stdout=subprocess.PIPE) print (p.returncode)
Приведенный выше фрагмент кода дает следующий результат.
После использования сообщения мы научим вас, как получить код возврата подпроцесса. Метод Communicate() по существу записывает входные данные, считывает все выходные данные и ожидает завершения работы подпроцесса (в этом примере нет никаких входных данных, поэтому он просто закрывает стандартный ввод подпроцесса, чтобы обозначить, что входных данных больше нет).
import subprocess p = subprocess.Popen(["echo", "Welcome"], stdout=subprocess.PIPE) print (p.communicate()[0])
Это то, что приведенный выше код выдает на выходе.
В этом примере программы мы собираемся использовать выходные данные процесса сохранения. Используйте функцию вывода процесса сохранения, чтобы сохранить вывод кода в виде строки. Синтаксис этого метода следующий:
Метод stdout подпроцесса в Python принимает несколько параметров: args: это команда, которую вы хотите запустить. Можно передать несколько команд, разделив их точкой с запятой (;). Значение, переданное как (os.pipe()) стандартному входному потоку, называется стандартным вводом. Полученное значение стандартного потока вывода — stdout. Любые ошибки из стандартного потока ошибок обрабатываются stderr. Если значение true, логический параметр оболочки заставляет процесс запускаться в новой оболочке. Универсальный символ новой строки — это логический параметр, и когда его значение равно true, он открывает файлы с помощью stdout и stderr.
подпроцесс импорта.
p = subprocess.check_output(["echo", "Phython is easy to learn!"]) print(p)
Результат можно увидеть здесь.
В этом посте вы узнали о подпроцессах в Python и о том, как извлечь код возврата из процесса. Включив модуль подпроцесса, вы можете легко запускать внешние процессы непосредственно из кода Python. Методы Popen, Communication и returncode являются наиболее важными функциями в этой статье. Техника Python popen() устанавливает соединение с командой или из нее.
Аргумент bufsize эквивалентен аргументу size функции open(). Метод Communicate() эффективно записывает входные данные, собирает все выходные данные и ожидает завершения подпроцесса. Функция returncode() возвращает код возврата, указанный выполненной командой. Команда выполняется в своем собственном процессе и не требует ввода данных пользователем. Мы объяснили эти методы в наших предоставленных примерах. У вас не будет особых проблем с созданием и взаимодействием с подпроцессами в Python, как только вы попрактикуетесь и научитесь правильно использовать эти функции.