56 lines
1.9 KiB
Python
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
|