#1065 linux: add shell run operation

- Executed script runs with same privilege as ogClient process.
- Uses subprocess.run instead of subprocess.Popen, it's a bit simpler.
  We can't specify executable, though. Shouldn't need so in Linux mode.
- Uses shell=True, keep in mind security considerations listed at:
  https://docs.python.org/3/library/subprocess.html#security-considerations
  (shlex.quote can be used for unix shells)
more_events
Jose M. Guisado 2021-11-15 12:08:43 +01:00
parent 69d214f63b
commit ab7abf96a6
1 changed files with 19 additions and 2 deletions

View File

@ -7,10 +7,13 @@
# (at your option) any later version.
import os
from pystray import Icon, Menu, MenuItem
import subprocess
from subprocess import CalledProcessError
import multiprocessing as mp
from multiprocessing import Process
from PIL import Image, ImageDraw
from pystray import Icon, Menu, MenuItem
from src.ogRest import ThreadState
@ -74,7 +77,21 @@ class OgLinuxOperations:
os.system('systemctl reboot')
def shellrun(self, request, ogRest):
raise NotImplementedError
cmd = request.getrun()
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.stdout
def session(self, request, ogRest):
raise NotImplementedError