diff options
Diffstat (limited to 'src/windows/ogOperations.py')
-rw-r--r-- | src/windows/ogOperations.py | 35 |
1 files changed, 21 insertions, 14 deletions
diff --git a/src/windows/ogOperations.py b/src/windows/ogOperations.py index 23e962c..9a80b0a 100644 --- a/src/windows/ogOperations.py +++ b/src/windows/ogOperations.py @@ -7,10 +7,10 @@ # (at your option) any later version. import os +import locale import ctypes import psutil import subprocess -from subprocess import CalledProcessError import multiprocessing as mp from multiprocessing import Process, freeze_support from src.log import OgError @@ -84,20 +84,27 @@ class OgWindowsOperations: def shellrun(self, request, ogRest): cmd = request.getrun() + is_inline = request.get_inline() + + if not is_inline: + raise OgError("Only inline mode is supported on Windows") + + env = os.environ.copy() + env['OutputEncoding'] = 'utf8' + try: - result = subprocess.run(cmd, - shell=True, - stdin=subprocess.DEVNULL, - capture_output=True, - text=True, - check=True) - except CalledProcessError as error: - if error.stderr: - return error.stderr - if error.stdout: - return error.stdout - return "{Non zero exit code and empty output}" - return (result.returncode, cmd, result.stdout) + ogRest.proc = subprocess.Popen( + cmd, + stdout=subprocess.PIPE, + shell=True, + env=env, + ) + output, error = ogRest.proc.communicate() + except (OSError, subprocess.SubprocessError) as e: + raise OgError(f'Error when running "shell run" subprocess: {e}') from e + + output = output.decode('utf-8-sig', errors='replace') + return (ogRest.proc.returncode, cmd, output) def session(self, request, ogRest): raise OgError('Function not implemented') |