Выполнение команд Linux в Python пошаговое руководство для разработчиков

Для выполнения команды 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)

Понравилась статья? Поделить с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии