Рубрики
Без рубрики

Системная команда Python: Как выполнять команды оболочки в Python?

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

Автор оригинала: 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, но стоит отметить, что методы не ограничиваются ими.

Мы рекомендуем опробовать другие команды, используя описанные выше методы самостоятельно, чтобы получить лучшее понимание.

По любым дополнительным вопросам, не стесняйтесь комментировать ниже.

Рекомендации