1
0
Fork 0
mirror of https://github.com/yavook/kiwi-scp.git synced 2025-12-07 09:03:06 +00:00
kiwi-scp/src/kiwi/subcommands/utils/dockercommand.py

67 lines
2 KiB
Python
Raw Normal View History

2020-08-10 15:40:56 +00:00
import logging
import subprocess
2020-08-12 14:43:13 +00:00
from ...config import LoadedConfig
from .executable import get_exe_key
2020-08-10 15:40:56 +00:00
class DockerCommand:
class __DockerCommand:
__cmd = []
def __init__(self, exe_name):
config = LoadedConfig.get()
self.__cmd = [config[get_exe_key(exe_name)]]
2020-08-10 15:40:56 +00:00
if DockerCommand.__requires_root:
self.__cmd = [config[get_exe_key("sudo")], *self.__cmd]
2020-08-11 10:08:03 +00:00
def __build_cmd(self, args, **kwargs):
cmd = [*self.__cmd, *args]
2020-08-11 10:08:03 +00:00
logging.debug(f"DockerProgram cmd{cmd}, kwargs{kwargs}")
2020-08-10 15:40:56 +00:00
return cmd
def run(self, args, **kwargs):
return subprocess.run(
2020-08-11 10:08:03 +00:00
self.__build_cmd(args, **kwargs),
2020-08-10 15:40:56 +00:00
**kwargs
)
def run_less(self, args, **kwargs):
process = subprocess.Popen(
2020-08-11 10:08:03 +00:00
self.__build_cmd(args, **kwargs),
2020-08-10 15:40:56 +00:00
stdout=subprocess.PIPE, stderr=subprocess.DEVNULL,
**kwargs
)
less_process = subprocess.run(
['less', '-R', '+G'],
stdin=process.stdout
)
process.communicate()
return less_process
__exe_name = None
__instances = {}
__requires_root = None
def __init__(self, exe_name):
2020-08-10 15:40:56 +00:00
if DockerCommand.__requires_root is None:
try:
config = LoadedConfig.get()
subprocess.run(
2020-08-10 12:50:47 +00:00
[config[get_exe_key('docker')], 'ps'],
check=True, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL
)
2020-08-10 15:40:56 +00:00
DockerCommand.__requires_root = False
except subprocess.CalledProcessError:
2020-08-10 15:40:56 +00:00
DockerCommand.__requires_root = True
self.__exe_name = exe_name
2020-08-10 15:40:56 +00:00
if exe_name not in DockerCommand.__instances:
DockerCommand.__instances[exe_name] = DockerCommand.__DockerCommand(exe_name)
def __getattr__(self, item):
2020-08-12 14:43:13 +00:00
return getattr(self.__instances[self.__exe_name], item)