Для выполнения команды Linux в Python используйте модуль subprocess. Он позволяет запускать внешние команды и взаимодействовать с ними. Простейший способ – вызвать функцию subprocess.run(). Например, чтобы вывести содержимое текущей директории, напишите:
import subprocess
subprocess.run(["ls", "-l"])
result = subprocess.run(["ls", "-l"], capture_output=True)
print(result.stdout.decode())
subprocess.run("wc -l file.txt", shell=True)
Обратите внимание, что shell=True может быть небезопасным, если команда содержит пользовательский ввод. В таких случаях лучше избегать его использования.
Если требуется выполнить команду асинхронно, используйте subprocess.Popen(). Это позволяет запускать процесс в фоновом режиме и управлять им:
process = subprocess.Popen(["ping", "google.com"])
process.wait()
Таким образом, вы можете интегрировать любые команды Linux в свои Python-скрипты, автоматизируя задачи и упрощая работу с системой.
Использование модуля subprocess для выполнения команд
Для выполнения команд Linux в Python используйте модуль subprocess. Этот модуль предоставляет гибкие инструменты для взаимодействия с системными командами и управления их выполнением. Начните с импорта модуля:
import subprocess
Чтобы выполнить простую команду, например, ls, воспользуйтесь функцией subprocess.run():
result = subprocess.run(['ls', '-l'], capture_output=True, text=True)
print(result.stdout)
Если нужно выполнить команду с передачей данных через стандартный ввод, используйте параметр input:
result = subprocess.run(['grep', 'python'], input='Python is great
Python is fun', text=True, capture_output=True)
print(result.stdout)
Для обработки ошибок проверяйте код возврата команды, доступный в result.returncode. Если код не равен 0, это указывает на ошибку:
if result.returncode != 0:
print(f"Ошибка: {result.stderr}")
Если требуется выполнить команду в фоновом режиме, используйте subprocess.Popen():
process = subprocess.Popen(['sleep', '10'])
process.wait() # Ожидание завершения процесса
Для работы с конвейерами (pipeline) соединяйте несколько команд через subprocess.PIPE:
p1 = subprocess.Popen(['ls', '-l'], stdout=subprocess.PIPE)
p2 = subprocess.Popen(['grep', '.py'], stdin=p1.stdout, stdout=subprocess.PIPE)
p1.stdout.close()
output = p2.communicate()[0]
print(output.decode())
Используйте эти методы для выполнения и управления командами Linux в Python. Модуль subprocess делает этот процесс простым и эффективным.
Установка и импорт модуля
Для выполнения команд Linux в Python установите модуль subprocess. Он входит в стандартную библиотеку Python, поэтому отдельная установка не требуется. Если вам нужны дополнительные функции, например, управление процессами или взаимодействие с оболочкой, используйте модуль sh.
Установите sh через pip:
pip install sh
После установки импортируйте модуль в ваш скрипт:
import subprocess
import sh
result = subprocess.run(['ls'], capture_output=True, text=True)
print(result.stdout)
Для sh команда будет выглядеть так:
from sh import ls
print(ls())
Выберите подходящий модуль в зависимости от ваших задач. subprocess предоставляет больше контроля над процессами, а sh упрощает работу с командами Linux.
| Модуль | Преимущества |
|---|---|
subprocess |
Гибкость, контроль над процессами, стандартная библиотека |
sh |
Простота использования, интуитивный синтаксис |
Основные функции и их синтаксис
Для выполнения команд Linux в Python используйте модуль subprocess. Он предоставляет гибкие инструменты для взаимодействия с системой. Основная функция – subprocess.run(). Её синтаксис прост: передайте команду как список строк, например, subprocess.run(["ls", "-l"]). Это выполнит команду ls -l и вернёт объект с результатом.
Если команда требует повышенных привилегий, добавьте sudo в начало списка аргументов. Например, subprocess.run(["sudo", "apt", "update"]). Убедитесь, что скрипт запускается с правами администратора.
Для обработки ошибок используйте аргумент check=True. Если команда завершится с ненулевым кодом, будет вызвано исключение subprocess.CalledProcessError. Это помогает быстро находить проблемы в выполнении команд.
Если нужно выполнить команду в фоновом режиме, добавьте амперсанд & в конец команды и используйте shell=True. Например, subprocess.run("sleep 10 &", shell=True) запустит процесс в фоне.
Примеры выполнения простых команд
Для выполнения команды ls в Python используйте модуль subprocess. Вот пример:
import subprocess
result = subprocess.run(['ls', '-l'], capture_output=True, text=True)
print(result.stdout)
Этот код выведет содержимое текущей директории в формате списка.
Чтобы создать директорию с помощью команды mkdir, выполните следующий код:
import subprocess
subprocess.run(['mkdir', 'new_directory'])
После выполнения в текущей директории появится папка new_directory.
Для проверки текущего пути используйте команду pwd:
import subprocess
result = subprocess.run(['pwd'], capture_output=True, text=True)
print(result.stdout)
Результат покажет полный путь к текущей директории.
Если нужно удалить файл, примените команду rm:
import subprocess
subprocess.run(['rm', 'file_to_delete.txt'])
Этот код удалит файл file_to_delete.txt из текущей директории.
Для копирования файлов используйте команду cp:
import subprocess
subprocess.run(['cp', 'source_file.txt', 'destination_file.txt'])
Файл source_file.txt будет скопирован в destination_file.txt.
Эти примеры помогут вам быстро интегрировать команды Linux в Python-скрипты.
import subprocess
result = subprocess.run(['ls', '-l'], capture_output=True, text=True)
if result.returncode == 0:
print(result.stdout)
else:
print(result.stderr)
process = subprocess.Popen(['ping', 'google.com'], stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
while True:
output = process.stdout.readline()
if output == '' and process.poll() is not None:
break
if output:
print(output.strip())
import subprocess
result = subprocess.run(['ls', '-l'], capture_output=True, text=True)
print(result.stdout)
for line in result.stdout.splitlines():
print(line)
process = subprocess.Popen(['ping', 'google.com'], stdout=subprocess.PIPE, text=True)
for line in process.stdout:
print(line.strip())
Если команда завершается с ошибкой, проверьте result.stderr для получения диагностической информации:
if result.returncode != 0:
print("Ошибка:", result.stderr)
Работа с ошибками и кодами завершения
При выполнении команд Linux через Python используйте модуль subprocess, чтобы получить код завершения. Код завершения равен 0, если команда выполнена успешно, и отличен от 0 в случае ошибки. Проверяйте этот код сразу после выполнения команды, чтобы обработать возможные сбои.
Пример: используйте метод subprocess.run() с аргументом check=True, чтобы автоматически вызвать исключение subprocess.CalledProcessError, если команда завершилась с ошибкой. Это упрощает обработку неудачных сценариев.
result = subprocess.run(["ls", "несуществующий_файл"], capture_output=True, text=True)
if result.returncode != 0:
print(f"Ошибка: {result.stderr}")
Для более сложных сценариев, где требуется обработка нескольких команд, используйте циклы или условные конструкции для анализа кодов завершения. Это поможет избежать неожиданных сбоев в работе скрипта.
Если команда зависает, добавьте аргумент timeout в subprocess.run(), чтобы прервать выполнение через заданное время. Это предотвратит бесконечное ожидание завершения процесса.
output = subprocess.check_output("ls -l", shell=True).decode("utf-8")
lines = output.splitlines()
for line in lines:
parts = line.split()
print(f"Права: {parts[0]}, Имя: {parts[-1]}")
import json
data = json.loads(output)
from pprint import pprint
pprint(data)
with open("output.txt", "w") as file:
file.write(output)






