Работая в Python, вы можете столкнуться с случаями, когда вы хотите быстрый способ запуска программ из командной строки. Это могут быть ваши собственные сценарии Python или любая другая программа командной строки. Это где модуль подпроцессы может вступить в игру.
Подпроцессный модуль, присутствующий в стандартной установке Python, используется для запуска новых приложений или программ через код Python путем создания новых процессов.
Это дает нам возможность:
- породить новые процессы
- Подключитесь к их вводам, выводам и ошибкам
- Получить их коды возврата
Распространенным использованием для подпроцесса будет перечисление файлов и папок в каталоге. Это использует метод прогона подпроцессы.
Код будет отличаться в зависимости от того, в какой операционной системе вы находитесь. Например, на компьютере на основе Windows это будет использование директора команды
Для Linux
import subprocess subprocess.run('ls')
Для окон
import subprocess subprocess.run("dir", shell=True)
В приведенном выше коде мы имеем:
- Импорт подпроцесс -модуль
- Вызовите модуль запуска из него
- Передайте команду Directory Directory на основе вашей системы (LS/DIR). Если вы находитесь в Windows, вам придется дополнительно пройти, потому что DIR – это команда Shell, и вам нужно сообщить системе, что вы хотите ее использовать.
Мы автоматически получили вывод в терминале, хотя мы сами не печатали. Вот как работает команда Run – по умолчанию не захватывает нашу команду.
Посмотрим, что произойдет, если мы попытаемся захватить нашу команду, поместив ее в переменную
import subprocess result = subprocess.run("dir", shell=True) print(result)
Вывод не то, что вы ожидаете. Мы все еще получаем вывод, и сообщение, содержащее аргументы, которые были переданы, и код возврата.
Если мы хотим захватить выход, мы бы изменили код на это:
import subprocess result = subprocess.run(["dir"], shell=True, capture_output=True, text=True) print(result.stdout)
Мы добавили:
capture_output = Истинный
: Чтобы захватить выходтекст = Верно
: Декодировать выход в читаемый формат, поскольку он захвачен как байты- Мы тогда
print result.stdout
: результат как стандартный выход
То же самое можно получить с помощью следующего кода:
import subprocess result = subprocess.run(["ls", "-la"], stdout=subprocess.PIPE, text=True) print(result.stdout)
Разница в Труба этот код выполняет ту же функцию, что и
Кроме того, мы используем команду LS с аргументом -LA оба приняты в виде списка
Есть еще кое-что..
Есть еще больше, что вы можете сделать с подпроцессом, включая вывод в файл, чтение данных из файла и для интерактивного запуска программ, чтобы назвать несколько вещей. Узнайте все это и многое другое в: Полная статья на Pythonhowtoprogam
Оригинал: “https://dev.to/charlesw001/execute-commands-from-the-command-line-in-a-python-program-3edn”