Статьи

Как запускать команды Unix в вашей программе Python

Unix — это операционная система, которая была разработана примерно в 1969 году в AT & T Bell Labs Кеном Томпсоном и Деннисом Ричи. Есть много интересных команд Unix, которые мы можем использовать для выполнения различных задач. Вопрос в том, можем ли мы использовать такие команды непосредственно в программе Python? Это то, что я покажу вам в этом уроке.

Команда Unix ls выводит список всех файлов в каталоге. Если вы поставите ls как есть в скрипте Python, это то, что вы получите при запуске программы:

1
2
3
4
Traceback (most recent call last):
  File «test.py», line 1, in <module>
    ls
NameError: name ‘ls’ is not defined

Это показывает, что интерпретатор Python рассматривает ls как переменную и требует, чтобы она была определена (т.е. инициализирована), а не обрабатывал ее как команду Unix.

Одним из решений этой проблемы является использование os.system() из Python-модуля os .

Как указано в документации, os.system() :

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

Итак, мы можем запустить команду ls в Python следующим образом:

1
2
import os
os.system(‘ls’)

Это вернет список файлов в вашем текущем каталоге, где находится ваша .py программа.

Давайте возьмем другой пример. Если вы хотите вернуть текущую дату и время, вы можете использовать date команды Unix следующим образом:

1
2
import os
os.system(‘date’)

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

Tue May 24 17:29:20 CEST 2016

Хотя os.system() работает, это не рекомендуется, поскольку он считается устаревшим и устаревшим. Более рекомендуемое решение — функция call(args) модуля subprocess Python. Как уже упоминалось в документации об этой функции:

Запустите команду, описанную аргументами. Дождитесь завершения команды, затем верните атрибут кода возврата.

Если мы хотим запустить команду ls Unix, используя этот метод, мы можем сделать следующее:

1
2
from subprocess import call
call(‘ls’)

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

1
2
3
4
import subprocess
time = subprocess.Popen(‘date’, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
output, err = time.communicate()
print ‘It is’, output

Приведенный выше пример можно запустить проще, используя check_output() , следующим образом:

1
2
3
import subprocess
time = subprocess.check_output(‘date’)
print ‘It is’, time

Выходные данные вышеупомянутых сценариев:

It is Tue May 24 19:14:22 CEST 2016

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

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