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 ()
Одним из решений этой проблемы является использование 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 .