summaryrefslogtreecommitdiffstats
path: root/src/windows/ogOperations.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/windows/ogOperations.py')
-rw-r--r--src/windows/ogOperations.py35
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')