Системная команда Python – os.system(), subprocess.call()

В этом учебнике мы узнаем о команде системы Python. Ранее мы изучили Случайное число Python.

Команда системы Python

При создании программы на Python вам может понадобиться выполнить некоторые оболочечные команды для вашей программы. Например, если вы используете среду разработки Pycharm, то, вероятно, заметили, что есть опция для публикации вашего проекта на github. И, вероятно, вы знаете, что передача файлов выполняется с помощью git, который управляется с помощью командной строки. Таким образом, Pycharm выполняет некоторые оболочечные команды в фоновом режиме для этого. Тем не менее, в этом учебнике мы узнаем некоторые основы выполнения оболочечных команд из вашего кода Python.

Функция Python os.system()

Мы можем выполнить системную команду, используя функцию os.system(). Согласно официальной документации, сказано, что

Это реализуется путем вызова стандартной функции Си system(), и имеет те же ограничения.

Однако, если команда генерирует какой-либо вывод, он отправляется в стандартный поток вывода интерпретатора. Использование этой команды не рекомендуется. В следующем коде мы попытаемся узнать версию git, используя системную команду git --version.

import os

cmd = "git --version"

returned_value = os.system(cmd)  # returns the exit code in unix
print('returned value:', returned_value)

Следующий вывод найден в Ubuntu 16.04, где git уже установлен.

git version 2.14.2
returned value: 0

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

Функция Python subprocess.call()

В предыдущем разделе мы видели, что функция os.system() работает нормально. Но это не рекомендуемый способ выполнения оболочечных команд. Мы будем использовать модуль Python subprocess для выполнения системных команд. Мы можем запускать оболочечные команды, используя функцию subprocess.call(). Смотрите следующий код, который эквивалентен предыдущему коду.

import subprocess

cmd = "git --version"

returned_value = subprocess.call(cmd, shell=True)  # returns the exit code in unix
print('returned value:', returned_value)

И вывод будет таким же.

Функция Python subprocess.check_output()

До сих пор мы выполняли системные команды с помощью Python. Но мы не могли манипулировать выводом, создаваемым этими командами. Используя функцию subprocess.check_output(), мы можем сохранить вывод в переменную.

import subprocess

cmd = "date"

# возвращает вывод как байтовую строку
returned_output = subprocess.check_output(cmd)

# используем функцию decode() для преобразования байтовой строки в строку
print('Current date is:', returned_output.decode("utf-8"))

Это приведет к выводу, подобному следующему:

Current date is: Thu Oct  5 16:31:41 IST 2017

Итак, в вышеприведенных разделах мы обсудили основные идеи выполнения системной команды Python. Но в изучении нет ограничений. Если хотите, можете узнать больше о выполнении системных команд Python с использованием модуля subprocess в официальной документации.

Source:
https://www.digitalocean.com/community/tutorials/python-system-command-os-subprocess-call