This commit is contained in:
LeonOstrez
2023-07-28 10:24:22 +02:00

41
euclid/helpers/cli.py Normal file
View File

@@ -0,0 +1,41 @@
import subprocess
import os
import signal
import threading
import queue
import time
def enqueue_output(out, queue):
for line in iter(out.readline, b''):
queue.put(line)
out.close()
def run_command(command, queue, pid_container):
process = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=True, preexec_fn=os.setsid)
pid_container[0] = process.pid
t = threading.Thread(target=enqueue_output, args=(process.stdout, queue))
t.daemon = True
t.start()
def execute_command(command, timeout=5):
q = queue.Queue()
pid_container = [None]
run_command(command, q, pid_container)
output = ''
start_time = time.time()
while True:
elapsed_time = time.time() - start_time
if elapsed_time > timeout:
os.killpg(pid_container[0], signal.SIGKILL)
break
try:
line = q.get_nowait()
except queue.Empty:
line = None
if line:
output += line
return output[-2000:]