Robovojtik/shell_functions.py
2025-03-20 01:32:29 +01:00

56 lines
1.9 KiB
Python

"""
Module: shell_functions.py
----------------------------
Obsahuje funkce pro vykonávání lokálních shellových příkazů a tvorbu skriptů.
"""
import subprocess
import logging
logger = logging.getLogger("robovojtik.shell_functions")
def clean_command(command):
"""
Odstraní backticky a nepotřebné mezery z příkazu.
"""
return command.replace("`", "").strip()
def spust_prikaz(command):
"""
Spustí příkaz lokálně a vrátí jeho výstup.
V případě chyby vrací chybovou hlášku.
"""
try:
logger.debug(f"Lokálně spouštím příkaz: {command}")
output = subprocess.check_output(command, shell=True, stderr=subprocess.STDOUT, universal_newlines=True)
return output.strip()
except subprocess.CalledProcessError as e:
return f"Chyba při vykonávání příkazu:\n{e.output}"
def vytvor_skript(nazev, obsah):
"""
Zapíše obsah do souboru s daným názvem a nastaví jej jako spustitelný.
"""
try:
with open(nazev, "w") as f:
f.write(obsah)
subprocess.call(f"chmod +x {nazev}", shell=True)
logger.debug(f"Skript {nazev} vytvořen a nastaven jako spustitelný.")
return f"Skript {nazev} byl úspěšně vytvořen."
except Exception as e:
return f"Nastala chyba při tvorbě skriptu: {str(e)}"
def run_command_locally_and_report(command, api_interface):
"""
Spustí příkaz lokálně, odešle jeho výstup jako report (s prefixem)
do asistenta a vrátí tuple (output, assistant_response).
"""
command = clean_command(command)
output = spust_prikaz(command)
if not output.startswith("Chyba při vykonávání příkazu:"):
report_text = f"Výstup příkazu (příkaz proběhl úspěšně):\n{output}"
else:
report_text = f"Výstup příkazu:\n{output}"
answer = api_interface.posli_dotaz_do_assistenta(report_text)
return output, answer