mirror of
ssh://git.janware.com/janware/proj/jw-pkg
synced 2026-04-25 09:35:54 +02:00
29 lines
978 B
Python
29 lines
978 B
Python
|
|
# -*- 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)
|