From f294babec3ae64c4f2e93adfdb5e1a0652f5fef3 Mon Sep 17 00:00:00 2001 From: LeonOstrez <41999013+LeonOstrez@users.noreply.github.com> Date: Mon, 28 Aug 2023 16:49:20 +0200 Subject: [PATCH] cleanup PR --- pilot/helpers/cli.py | 59 +++++++++++++++----------------------------- 1 file changed, 20 insertions(+), 39 deletions(-) diff --git a/pilot/helpers/cli.py b/pilot/helpers/cli.py index 08a85c9..513441e 100644 --- a/pilot/helpers/cli.py +++ b/pilot/helpers/cli.py @@ -5,7 +5,7 @@ import threading import queue import time import uuid -import platform # Import the platform module +import platform from termcolor import colored from database.database import get_command_run_from_hash_id, save_command_run @@ -25,40 +25,25 @@ def enqueue_output(out, q): def run_command(command, root_path, q_stdout, q_stderr, pid_container): if platform.system() == 'Windows': # Check the operating system - return run_command_windows(command, root_path, q_stdout, q_stderr, pid_container) + process = subprocess.Popen( + command, + shell=True, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + text=True, + cwd=root_path + ) else: - return run_command_unix(command, root_path, q_stdout, q_stderr, pid_container) + process = subprocess.Popen( + command, + shell=True, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + text=True, + preexec_fn=os.setsid, # Use os.setsid only for Unix-like systems + cwd=root_path + ) -def run_command_windows(command, root_path, q_stdout, q_stderr, pid_container): - # Windows-specific implementation using subprocess - process = subprocess.Popen( - command, - shell=True, - stdout=subprocess.PIPE, - stderr=subprocess.PIPE, - text=True, - cwd=root_path - ) - pid_container[0] = process.pid - t_stdout = threading.Thread(target=enqueue_output, args=(process.stdout, q_stdout)) - t_stderr = threading.Thread(target=enqueue_output, args=(process.stderr, q_stderr)) - t_stdout.daemon = True - t_stderr.daemon = True - t_stdout.start() - t_stderr.start() - return process - -def run_command_unix(command, root_path, q_stdout, q_stderr, pid_container): - # Unix-like systems implementation using os.setsid - process = subprocess.Popen( - command, - shell=True, - stdout=subprocess.PIPE, - stderr=subprocess.PIPE, - text=True, - preexec_fn=os.setsid, # Use os.setsid only for Unix-like systems - cwd=root_path - ) pid_container[0] = process.pid t_stdout = threading.Thread(target=enqueue_output, args=(process.stdout, q_stdout)) t_stderr = threading.Thread(target=enqueue_output, args=(process.stderr, q_stderr)) @@ -77,7 +62,7 @@ def terminate_process(pid): pass else: # Unix-like systems try: - os.killpg(pid, signal.SIGTERM) + os.killpg(pid, signal.SIGKILL) except OSError: # Handle any potential errors here pass @@ -164,11 +149,7 @@ def execute_command(project, command, timeout=None, force=False): else: print("\nTimeout detected. Stopping command execution...") - if platform.system() == 'Windows': - pid = pid_container[0] # Replace with the actual PID - terminate_process(pid) - else: - os.killpg(pid_container[0], signal.SIGKILL) + terminate_process(pid_container[0]) # stderr_output = '' # while not q_stderr.empty():