""" 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