2025-06-09 10:17:12 +05:00
|
|
|
|
import subprocess
|
|
|
|
|
|
from typing import Tuple
|
|
|
|
|
|
|
2025-06-12 16:32:05 +05:00
|
|
|
|
|
2025-06-09 10:17:12 +05:00
|
|
|
|
class CLIExecutor:
|
2025-10-21 09:20:50 +05:00
|
|
|
|
"""Утилита для безопасного выполнения CLI-команд.
|
2025-10-14 11:42:57 +05:00
|
|
|
|
|
|
|
|
|
|
Назначение:
|
|
|
|
|
|
Инкапсулирует вызов `subprocess.run` и приводит результат к удобному
|
|
|
|
|
|
кортежу (код возврата, stdout) без генерации исключений при ошибках.
|
2025-06-09 10:17:12 +05:00
|
|
|
|
"""
|
2025-06-12 16:32:05 +05:00
|
|
|
|
|
2025-06-09 10:17:12 +05:00
|
|
|
|
@staticmethod
|
|
|
|
|
|
def run(command: list) -> Tuple[int, str]:
|
|
|
|
|
|
"""
|
|
|
|
|
|
Выполняет команду в системе и возвращает код и вывод.
|
|
|
|
|
|
|
|
|
|
|
|
Args:
|
|
|
|
|
|
command (list): Список аргументов команды для выполнения.
|
|
|
|
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
|
tuple: Код возврата и вывод команды.
|
|
|
|
|
|
"""
|
|
|
|
|
|
result = subprocess.run(
|
|
|
|
|
|
command,
|
|
|
|
|
|
stdout=subprocess.PIPE,
|
|
|
|
|
|
stderr=subprocess.PIPE,
|
2025-06-12 16:32:05 +05:00
|
|
|
|
check=False, # Не вызываем исключение при ошибке
|
2025-06-09 10:17:12 +05:00
|
|
|
|
)
|
2025-06-12 16:32:05 +05:00
|
|
|
|
return result.returncode, result.stdout.decode("utf-8")
|