# -*- coding: utf-8 -*- import os from ..util import run_cmd from ..ExecContext import ExecContext as Base from ..ExecContext import Result class Local(Base): async def _run(self, *args, **kwargs) -> Result: return await run_cmd(*args, **kwargs) async def _sudo(self, cmd: list[str], mod_env: dict[str, str] = {}, opts: list[str]=[], verbose=True) -> Result: env: dict[str, str]|None = None cmd_input: str|None = None if mod_env: env = os.environ.copy() env.update(mod_env) cmdline = [] if os.getuid() != 0: cmdline.append('/usr/bin/sudo') if env is not None: cmdline.append('--preserve-env=' + ','.join(mod_env.keys())) cmdline.extend(opts) cmdline.extend(cmd) if self.interactive: cmd_input = "mode:interactive" return await self._run(cmdline, throw=True, verbose=verbose, env=env, cmd_input=cmd_input)