diff options
author | AL-LCL <alvin@alvinhavel.com> | 2023-05-19 11:01:49 +0200 |
---|---|---|
committer | AL-LCL <alvin@alvinhavel.com> | 2023-05-19 11:01:49 +0200 |
commit | 20dbeb2f38684c65ff0a4b99012c161295708e88 (patch) | |
tree | a5b8445f55da2fbbb92443b68e9d7354a290c598 /foreign/utility/terminal_pipe.py |
Diffstat (limited to 'foreign/utility/terminal_pipe.py')
-rw-r--r-- | foreign/utility/terminal_pipe.py | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/foreign/utility/terminal_pipe.py b/foreign/utility/terminal_pipe.py new file mode 100644 index 0000000..ca57844 --- /dev/null +++ b/foreign/utility/terminal_pipe.py @@ -0,0 +1,36 @@ +import multiprocessing + +from subprocess import Popen, PIPE + +from foreign.global_state import * + + +def get_terminal_pipe_data(data, return_dict): + encoding = state['settings']['encoding'] + shell = Popen(data, shell=True, stdin=PIPE, stdout=PIPE, stderr=PIPE) + stdout, stderr = shell.communicate() + return_dict['result'] = '{}{}'.format(stdout.decode(encoding), stderr.decode(encoding)).strip('\r\n').replace('ΓΏ', ' ') + + if return_dict['result'] == '': + return_dict['result'] = 'Empty Response' + + return return_dict['result'] + + +def terminal_pipe(data, safe, timeout): + if safe: + manager = multiprocessing.Manager() + return_dict = manager.dict() + + terminal_data = multiprocessing.Process(target=get_terminal_pipe_data, args=(data, return_dict), daemon=True) + terminal_data.start() + terminal_data.join(timeout) + + if terminal_data.is_alive(): + return_dict['result'] = f'Timeout reached of {timeout} seconds' + terminal_data.terminate() + terminal_data.join() + + return return_dict['result'] + else: + return get_terminal_pipe_data(data, {})
\ No newline at end of file |