Windows system command python

Системные команды с помощью Python (os.system())

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

Выполнение командных строк с помощью Python можно легко выполнить с помощью некоторых системных методов из os module .

Но с появлением модуля subprocess (с намерением заменить некоторые старые модули) доступ к командной строке стал намного проще в использовании. А также для управления выводом и избежания некоторых ограничений традиционных методов.

Выполнение команд оболочки в Python

Теперь, когда мы узнали о системных командах в Python. Давайте посмотрим, как мы можем реализовать то же самое.

1. Использование метода os.system()

Как указывалось ранее, выполнение команд оболочки в Python можно легко выполнить с помощью некоторых методов модуля os . Здесь мы собираемся использовать широко используемый os.system() .

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

Метод принимает системную команду как строку на входе и возвращает код вывода.

В приведенном ниже примере мы пытаемся проверить версию Python в нашей системе с помощью командной строки.

Здесь res сохраняет возвращенное значение (код выхода = 0 для успеха). Из выходных данных видно, что команда выполнена успешно, и мы получили нашу версию Python, как и ожидалось.

2. Использование модуля подпроцесса

Модуль subprocess поставляется с различными полезными методами или функциями для создания новых процессов, подключения к их каналам ввода / вывода / ошибок и получения их кодов возврата.

В этом руководстве мы рассматриваем методы call() и check_output() поскольку они просты в использовании и надежны. Но для получения дополнительной информации вы всегда можете обратиться к официальной документации.

2.1. Метод call()

Теперь перейдем к методу subprocess.call() .

Метод call() принимает аргументы командной строки, переданные в виде списка строк или с аргументом оболочки, установленным в True . И возвращает нам код выхода или статус.

В приведенном ниже фрагменте кода мы пытаемся установить pandas с помощью PIP из оболочки.

Как видим, команда выполнена успешно с zero возвращаемым значением.

2.2. Метод check_output()

Вышеупомянутые методы выполняют успешно переданную команду оболочки, но не дают пользователю свободы манипулировать способом получения вывода. Для этого на check_output() должен check_output() метод подпроцесса check_output() .

Метод выполняет переданную команду, но вместо возврата статуса выхода на этот раз возвращает bytes объект.

Присмотритесь к приведенному ниже примеру, где мы снова пытаемся установить модуль pymysql (уже установленный).

Здесь, как и в предыдущих случаях, res хранит объект, возвращаемый методом check_output() . Мы видим, что type(res) подтверждает, что объект имеет bytes тип.

После этого печатаем декодированную строку и видим, что команда успешно выполнена.

Вывод

Итак, сегодня мы узнали, как мы можем выполнять системные команды с помощью системной команды Python (os.system()) и модуля подпроцесса. Мы рассмотрели здесь еще несколько команд, связанных с Python, но стоит отметить, что методы этим не ограничиваются.

Читайте также:  Как восстановить драйвер звука windows 10

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

Если у вас возникнут дополнительные вопросы, оставляйте комментарии ниже.

Ссылки

  • Документация подпроцесса Python
  • Документация по ОС Python,
  • Системная команда Python — os.system(), subprocess.call() — статья о Journal Dev
  • Генерация случайных целых чисел с помощью Python randint()

    Учебник Python MySQL — Полное руководство

    Генерация случайных целых чисел с помощью Python randint()

    Функция system() модуля os в Python.

    Запустить/выполнить внешнюю команду в оболочке.

    Синтаксис:

    Параметры:

    Возвращаемое значение:

    Описание:

    Функция system() модуля os выполняет команду command в подоболочке ( subshell ). Это реализуется путем вызова стандартной функции языка Си system() и имеет те же ограничения. Изменения в sys.stdin и т. д. не отражаются в среде выполняемой команды. Если команда генерирует какой-либо вывод, он будет отправлен в стандартный поток вывода интерпретатора.

    В Unix возвращаемое значение является состоянием выхода процесса, закодированного в формате, указанном как для функции os.wait() . Обратите внимание, что POSIX не определяет значение возвращаемого значения функции Си system() , поэтому возвращаемое значение функции Python зависит от системы.

    В Windows возвращаемое значение возвращается системной оболочкой после выполнения команды. Оболочка задается переменной среды Windows COMSPEC: обычно это cmd.exe , который возвращает состояние завершения выполнения команды. В системах, использующих не нативную оболочку, смотрите документацию по вашей оболочке.

    Используйте эту функцию, если надо тупо запустить что-то из кода Python и не ждать результатов выполнения, по принципу — запустил и забыл.

    Другими словами, запуская команду функцией os.system(cmd) НЕ получиться получить/перенаправить вывод, который дает команда/программа cmd . Для извлечения данных из стандартного потока вывода воспользуйтесь модулем subprocess или по крайней мере функцией os.popen() :

    Модуль subprocess предоставляет более мощные средства для порождения новых процессов и получения их результатов. Использование модуля subprocess предпочтительнее, чем использование этой функции.

    Выполнение shell команд с Python

    Повторяющиеся задачи созрели для автоматизации. Разработчики и системные администраторы обычно автоматизируют рутинные задачи, такие как проверки работоспособности и резервное копирование файлов, с помощью сценариев оболочки. Однако, поскольку эти задачи становятся более сложными, сценарии оболочки могут усложняться в обслуживании.

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

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

    Использование os.system для запуска команды

    Python позволяет нам немедленно выполнить команду оболочки, которая хранится в строке, используя функцию os.system() .

    Давайте начнем с создания нового файла Python с именем echo_adelle.py и введите следующее:

    Первое, что мы делаем в нашем Python файле, это импортируем модуль os , который содержит функцию system , которая может выполнять команды оболочки. Следующая строка делает именно это, запускает команду echo в нашей оболочке через Python.

    В вашем терминале запустите этот файл с помощью следующей команды, и вы должны увидеть соответствующий вывод:

    По мере того, как команды echo выводятся в наш stdout , os.system() также возвращает код завершения команды оболочки. Код 0 означает, что он работает без проблем, а любое другое число означает ошибку.

    Давайте создадим новый файл с именем cd_return_codes.py и введите следующее:

    В этом сценарии мы создаем две переменные, в которых хранятся результаты выполнения команд, которые изменяют каталог на домашнюю папку и на несуществующую папку. Запустив этот файл, мы увидим:

    Первая команда, которая изменяет каталог на домашний каталог, выполняется успешно. Следовательно, os.system() возвращает код ноль, который хранится в home_dir . С другой стороны, unknown_dir сохраняет код завершения неудачной команды bash, чтобы изменить каталог на несуществующую папку.

    Функция os.system() выполняет команду, печатает любой вывод команды на консоль и возвращает код завершения команды. Если нам нужно более детальное управление вводом и выводом команды оболочки в Python, мы должны использовать модуль subprocess .

    Выполнение команды с подпроцессом

    Модуль subprocess — это рекомендуемый Python способ выполнения команд оболочки. Это дает нам гибкость для подавления вывода команд оболочки или цепочки входов и выходов различных команд вместе, в то же время обеспечивая аналогичный опыт os.system() для базовых сценариев использования.

    В новом файле с именем list_subprocess.py напишите следующий код:

    В первой строке мы импортируем модуль subprocess , который является частью стандартной библиотеки Python. Затем мы используем функцию subprocess.run() для выполнения команды. Также как и команда os.system() , subprocess.run() возвращает код того, что было выполнено.

    Обратите внимание, что subprocess.run() принимает список строк в качестве входных данных вместо одной строки. Первым элементом списка является название команды. Остальные пункты списка — это флаги и аргументы команды.

    Примечание: Как правило, вам нужно отделить аргументы , основанные на пространстве, например , ls -alh будет [«ls», «-alh»] , а ls -a -l -h , превратится в [«ls», «-a», -«l», «-h»] .

    Запустите этот файл, и вывод вашей консоли будет похож на:

    Теперь давайте попробуем использовать одну из более продвинутых функций subprocess.run() , а именно игнорирование вывода в stdout . В том же файле list_subprocess.py измените:

    Стандартный вывод команды теперь передается на специальное устройство /dev/null , что означает, что вывод не будет отображаться на наших консолях. Запустите файл в вашей оболочке, чтобы увидеть следующий вывод:

    Что если мы хотим получить результат команды? subprocess.run() поможет сделать это. Создайте новый файл с именем cat_subprocess.py , набрав следующее:

    Мы используем довольно много параметров, давайте рассмотрим их:

    1. stdout=subprocess.PIPE говорит Python перенаправить результат выполнения команды в объект, чтобы позже его можно было прочитать вручную
    2. text=True возвращает stdout и в stderr виде строк. Тип возвращаемого значения по умолчанию — байты.
    3. input=»Hello from the other side» говорит Python добавить строку в качестве ввода в команду cat .

    Запуск этого файла приводит к следующему выводу:

    Мы также можем бросить Exception без проверки значения возврата. В новом файле false_subprocess.py добавьте код ниже:

    В вашем терминале запустите этот файл. Вы увидите следующую ошибку:

    Используя check=True , мы сообщаем Python, что нужно вызывать любые исключения, если возникает ошибка. Так как мы столкнулись с ошибкой, оператор print в последней строке не был выполнен.

    Функция subprocess.run() дает нам огромную гибкость. Эта функция представляет собой упрощенную абстракцию класса subprocess.Popen , которая предоставляет дополнительные функциональные возможности, которые мы можем исследовать.

    Выполнение команды с Popen

    Класс subprocess.Popen предоставляет больше возможностей для разработчика при взаимодействии с оболочкой. Тем не менее, мы должны быть более точными в получении результатов и ошибок

    По умолчанию subprocess.Popen не останавливает обработку программы Python, если ее команда не завершила выполнение. В новом файле с именем list_popen.py введите следующее:

    Этот код эквивалентен list_subprocess.py . Он запускает команду с помощью subprocess.Popen и ожидает ее завершения, прежде чем выполнить оставшуюся часть сценария Python.

    Допустим, мы не хотим ждать завершения выполнения команды оболочки, чтобы программа могла работать над другими вещами. Как узнать, когда команда оболочки закончила выполнение?

    Метод poll() возвращает код завершения, если команда закончит работу, или None если он все еще выполняется. Например, если бы мы хотели проверить, завершено ли list_dir , а не ждать его, у нас была бы следующая строка кода:

    Для управления вводом и выводом subprocess.Popen нам нужно использовать метод communicate() .

    В новый файл с именем cat_popen.py добавьте следующий фрагмент кода:

    Метод communicate() принимает аргумент input , который используется для передачи входных данных команде оболочки. Метод communicate также возвращает stdout и stderr когда они установлены.

    Мы рассмотрели три способа запуска команд оболочки в Python с использованием класса subprocess.Popen . Давайте еще раз рассмотрим их характеристики, чтобы узнать, какой метод лучше всего подходит для требований проекта.

    Какой из них я должен использовать?

    Если вам нужно выполнить одну или несколько простых команд и вам не помешает, если их вывод поступит в консоль, вы можете использовать команду os.system() . Если вы хотите управлять вводом и выводом команды оболочки, используйте subsystem.run() . Если вы хотите выполнить команду и продолжить выполнять другую работу, пока она выполняется, используйте subprocess.Popen .

    Вот таблица с некоторыми различиями в юзабилити, которые вы также можете использовать для обоснования своего решения:

    Python System Command – os.system(), subprocess.call()

    Python Tutorial

    In this tutorial we will learn about Python System Command. Previously we learned about Python Random Number.

    Table of Contents

    Python System Command

    While making a program in python, you may need to exeucte some shell commands for your program. For example, if you use Pycharm IDE, you may notice that there is option to share your project on github. And you probably know that file transferring is done by git, which is operated using command line. So, Pycharm executes some shell commands in background to do it.

    However, In this tutorial we will learn some basics about executing shell commands from your python code.

    Python os.system() function

    We can execute system command by using os.system() function. According to the official document, it has been said that

    This is implemented by calling the Standard C function system(), and has the same limitations.

    However, if command generates any output, it is sent to the interpreter standard output stream. Using this command is not recommended. In the following code we will try to know the version of git using the system command git —version .

    The following output found in ubuntu 16.04 where git is installed already.

    Notice that we are not printing the git version command output to console, it’s being printed because console is the standard output stream here.

    Python subprocess.call() Function

    In the previous section, we saw that os.system() function works fine. But it’s not recommended way to execute shell commands. We will use Python subprocess module to execute system commands.

    We can run shell commands by using subprocess.call() function. See the following code which is equivalent to the previous code.

    And the output will be same also.

    Python subprocess.check_output() function

    So far, we executed the system commands with the help of python. But we could not manipulate the output produced by those commands. Using subprocess.check_output() function we can store the output in a variable.

    It will produce output like the following

    So, in the above sections we have discussed about basic ideas about executing python system command. But there is no limit in learning. If you wish, you can learn more about Python System command using subprocess module from official documentation.

    Читайте также:  Sort folders in windows explorer
Оцените статью