Автор оригинала: Pankaj Kumar.
Вступление
Сегодня в этом уроке мы обсудим как мы можем выполнять команды оболочки с помощью системной команды Python .
Итак, давайте начнем с некоторых основ системной команды Python.
Что такое системная команда Python?
Возможно, нам потребуется интегрировать функции для выполнения некоторых задач системного администрирования в Python. Они включают в себя поиск файлов, выполнение некоторых команд оболочки, выполнение некоторых дополнительных операций с файлами и т. Д. И для этого нам нужен какой-то способ взаимодействия между системой и интерпретатором python.
Выполнение командных строк с помощью Python можно легко выполнить с помощью некоторых системных методов из модуля os|/.
Но с введением модуля subprocess
(предназначенного для замены некоторых старых модулей) доступ к командной строке стал намного проще в использовании. А также манипулировать выводом и избегать некоторых ограничений традиционных методов.
Выполнение команд оболочки в Python
Теперь, когда мы узнали о системных командах в Python. Давайте посмотрим, как мы можем реализовать то же самое.
1. Использование метода os.system()
Как уже говорилось ранее, выполнение команд оболочки в Python можно легко выполнить с помощью некоторых методов модуля os
. Здесь мы будем использовать широко используемый метод os.system ()
.
Эта функция реализована с помощью функции C system()
и, следовательно, имеет те же ограничения.
Метод принимает системную команду в качестве строки при вводе и возвращает код выхода назад.
В приведенном ниже примере мы попытаемся проверить вашу систему версию Python с помощью командной строки в Python.
import os command = "python --version" #command to be executed res = os.system(command) #the method returns the exit status print("Returned Value: ", res)
Выход:
Python 3.7.4 Returned Value: 0
Здесь res
сохраняет возвращаемое значение (код выхода= 0 для успеха). Из выходных данных ясно, что команда выполнена успешно, и мы получаем нашу версию Python, как и ожидалось.
2. Использование модуля подпроцесса
Модуль subprocess
поставляется с различными полезными методами или функциями для создания новых процессов, подключения к их каналам ввода/вывода/ошибок и получения их кодов возврата.
В этом уроке мы рассмотрим методы call()
и check_output ()
, поскольку они просты в использовании и надежны . Но для получения дополнительной информации вы всегда можете обратиться к официальной документации .
2.1. Метод call()
Теперь перейдем к методу subprocess.call ()
.
Метод call()
принимает аргументы командной строки, переданные в виде списка строк или с аргументом shell , установленным в Верно
. И возвращает нам код выхода или статус .
В приведенном ниже фрагменте кода мы пытаемся установить pandas с помощью PIP из shell .
import subprocess command = "pip install pandas" #command to be executed res = subprocess.call(command, shell = True) #the method returns the exit code print("Returned Value: ", res)
Выход:
Collecting pandas Downloading pandas-1.0.3-cp37-cp37m-win32.whl (7.5 MB) Requirement already satisfied: pytz>=2017.2 in c:\users\sneha\appdata\local\programs\python\python37-32\lib\site-packages (from pandas) (2019.3) Requirement already satisfied: numpy>=1.13.3 in c:\users\sneha\appdata\local\programs\python\python37-32\lib\site-packages (from pandas) (1.18.1) Requirement already satisfied: python-dateutil>=2.6.1 in c:\users\sneha\appdata\local\programs\python\python37-32\lib\site-packages (from pandas) (2.8.1) Requirement already satisfied: six>=1.5 in c:\users\sneha\appdata\local\programs\python\python37-32\lib\site-packages (from python-dateutil>=2.6.1->pandas) (1.14.0) Installing collected packages: pandas Successfully installed pandas-1.0.3 Returned Value: 0
Как мы видим, команда успешно выполняется с возвращаемым значением ноль
.
2.2. Метод check_output()
Вышеупомянутые методы выполняют успешно переданную команду оболочки, но не дают пользователю свободы манипулировать тем, как мы получаем вывод. Для этого необходимо использовать метод subprocesses |/check_output () .
Метод выполняет переданную команду |, но вместо возврата состояния выхода на этот раз он возвращает объект bytes .
Более подробно рассмотрим пример ниже, где мы пытаемся снова установить модуль pymysql
(уже установленный).
import subprocess command = "pip install pymysql" #command to be executed res = subprocess.check_output(command) #system command print("Return type: ", type(res)) #type of the value returned print("Decoded string: ", res.decode("utf-8")) #decoded result
Выход:
Return type:Decoded string: Requirement already satisfied: pymysql in c:\users\sneha\appdata\local\programs\python\python37-32\lib\site-packages (0.9.3)
Здесь, как и в предыдущих случаях, res
удерживает возвращаемый объект методом check_output ()
. Мы видим, что type(res)
подтверждает, что объект имеет тип bytes
.
После этого мы печатаем строку decoded и видим, что команда была успешно выполнена.
Вывод
Итак, сегодня мы узнали, как мы можем выполнять системные команды с помощью системной команды Python (os.system()) и модуля подпроцесса. Мы рассмотрели здесь еще несколько команд, связанных с python, но стоит отметить, что методы не ограничиваются ими.
Мы рекомендуем опробовать другие команды, используя описанные выше методы самостоятельно, чтобы получить лучшее понимание.
По любым дополнительным вопросам, не стесняйтесь комментировать ниже.