1
0
Fork 0
mirror of https://github.com/yavook/kiwi-scp.git synced 2024-12-25 18:42:59 +00:00

DockerCommand now is an Executable

This commit is contained in:
Jörn-Michael Miehe 2020-08-12 17:39:55 +02:00
parent 8c2cdbda3a
commit 70b04f039a
2 changed files with 28 additions and 21 deletions

View file

@ -3,33 +3,39 @@ import subprocess
from .executable import Executable
class DockerCommand:
class DockerCommand(Executable):
__requires_root = None
__exe = None
def __init__(self, exe_name):
super().__init__(exe_name)
if DockerCommand.__requires_root is None:
try:
Executable('docker').run(
['ps'], check=True, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL
['ps'],
check=True, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL
)
DockerCommand.__requires_root = False
except subprocess.CalledProcessError:
DockerCommand.__requires_root = True
self.__exe = Executable(exe_name, DockerCommand.__requires_root)
def __getattr__(self, item):
return getattr(self.__exe, item)
def run(self, args, **kwargs):
# equivalent to 'super().run' but agnostic of nested class construct
super().__getattr__("run")(
args, DockerCommand.__requires_root,
**kwargs
)
def run_less(self, args, **kwargs):
process = self.Popen(
args, stdout=subprocess.PIPE, stderr=subprocess.DEVNULL,
args, DockerCommand.__requires_root,
stdout=subprocess.PIPE, stderr=subprocess.DEVNULL,
**kwargs
)
less_process = Executable('less').run(
['-R', '+G'], stdin=process.stdout
['-R', '+G'],
stdin=process.stdout
)
process.communicate()

View file

@ -20,35 +20,36 @@ def find_exe_file(exe_name):
class Executable:
__exe_name = None
__instances = {}
class __Executable:
__cmd = None
__exe_path = None
def __init__(self, exe_name, requires_root=False):
self.__cmd = [find_exe_file(exe_name)]
self.__exe_path = find_exe_file(exe_name)
def __build_cmd(self, args, requires_root=False, **kwargs):
cmd = [self.__exe_path, *args]
if requires_root:
self.__cmd = [find_exe_file("sudo"), *self.__cmd]
self.__exe_path = [find_exe_file("sudo"), self.__exe_path]
def __build_cmd(self, args, **kwargs):
cmd = [*self.__cmd, *args]
logging.debug(f"Executable cmd{cmd}, kwargs{kwargs}")
return cmd
def run(self, args, **kwargs):
def run(self, args, requires_root=False, **kwargs):
return subprocess.run(
self.__build_cmd(args, **kwargs),
self.__build_cmd(args, requires_root, **kwargs),
**kwargs
)
def Popen(self, args, **kwargs):
def Popen(self, args, requires_root=False, **kwargs):
return subprocess.Popen(
self.__build_cmd(args, **kwargs),
self.__build_cmd(args, requires_root, **kwargs),
**kwargs
)
__exe_name = None
__instances = {}
def __init__(self, exe_name, requires_root=False):
self.__exe_name = exe_name