exec/cmd: run_cmd(): add new params: stdin, stdin_input, check asddsadsa
This commit is contained in:
parent
1f9682f5de
commit
686191c388
2 changed files with 27 additions and 4 deletions
|
@ -60,9 +60,12 @@ class AbstractChroot(Protocol):
|
||||||
capture_output: bool,
|
capture_output: bool,
|
||||||
cwd: str,
|
cwd: str,
|
||||||
fail_inactive: bool,
|
fail_inactive: bool,
|
||||||
|
switch_user: Optional[str],
|
||||||
stdout: Optional[FileDescriptor],
|
stdout: Optional[FileDescriptor],
|
||||||
stderr: Optional[FileDescriptor],
|
stderr: Optional[FileDescriptor],
|
||||||
switch_user: Optional[str],
|
stdin: Optional[FileDescriptor],
|
||||||
|
stdin_input: Optional[str],
|
||||||
|
check: Optional[bool],
|
||||||
):
|
):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
@ -226,9 +229,12 @@ class Chroot(AbstractChroot):
|
||||||
capture_output: bool = False,
|
capture_output: bool = False,
|
||||||
cwd: Optional[str] = None,
|
cwd: Optional[str] = None,
|
||||||
fail_inactive: bool = True,
|
fail_inactive: bool = True,
|
||||||
|
switch_user: Optional[str] = None,
|
||||||
stdout: Optional[FileDescriptor] = None,
|
stdout: Optional[FileDescriptor] = None,
|
||||||
stderr: Optional[FileDescriptor] = None,
|
stderr: Optional[FileDescriptor] = None,
|
||||||
switch_user: Optional[str] = None,
|
stdin: Optional[FileDescriptor] = None,
|
||||||
|
stdin_input: Optional[str] = None,
|
||||||
|
check: Optional[bool] = None,
|
||||||
) -> Union[int, subprocess.CompletedProcess]:
|
) -> Union[int, subprocess.CompletedProcess]:
|
||||||
if not self.active and fail_inactive:
|
if not self.active and fail_inactive:
|
||||||
raise Exception(f'Chroot {self.name} is inactive, not running command! Hint: pass `fail_inactive=False`')
|
raise Exception(f'Chroot {self.name} is inactive, not running command! Hint: pass `fail_inactive=False`')
|
||||||
|
@ -245,13 +251,23 @@ class Chroot(AbstractChroot):
|
||||||
script = flatten_shell_script(script, shell_quote_items=False, wrap_in_shell_quote=False)
|
script = flatten_shell_script(script, shell_quote_items=False, wrap_in_shell_quote=False)
|
||||||
if cwd:
|
if cwd:
|
||||||
script = f"cd {shell_quote(cwd)} && ( {script} )"
|
script = f"cd {shell_quote(cwd)} && ( {script} )"
|
||||||
if switch_user:
|
if switch_user and switch_user != 'root':
|
||||||
inner_cmd = generate_cmd_su(script, switch_user=switch_user, elevation_method='none', force_su=True)
|
inner_cmd = generate_cmd_su(script, switch_user=switch_user, elevation_method='none', force_su=True)
|
||||||
else:
|
else:
|
||||||
inner_cmd = wrap_in_bash(script, flatten_result=False)
|
inner_cmd = wrap_in_bash(script, flatten_result=False)
|
||||||
cmd = flatten_shell_script(['chroot', self.path] + env_cmd + inner_cmd, shell_quote_items=True)
|
cmd = flatten_shell_script(['chroot', self.path] + env_cmd + inner_cmd, shell_quote_items=True)
|
||||||
|
|
||||||
return run_root_cmd(cmd, env=outer_env, attach_tty=attach_tty, capture_output=capture_output, stdout=stdout, stderr=stderr)
|
return run_root_cmd(
|
||||||
|
cmd,
|
||||||
|
env=outer_env,
|
||||||
|
attach_tty=attach_tty,
|
||||||
|
capture_output=capture_output,
|
||||||
|
stdout=stdout,
|
||||||
|
stderr=stderr,
|
||||||
|
stdin=stdin,
|
||||||
|
stdin_input=stdin_input,
|
||||||
|
check=check,
|
||||||
|
)
|
||||||
|
|
||||||
def mount_pkgbuilds(self, fail_if_mounted: bool = False) -> str:
|
def mount_pkgbuilds(self, fail_if_mounted: bool = False) -> str:
|
||||||
return self.mount(
|
return self.mount(
|
||||||
|
|
|
@ -97,6 +97,9 @@ def run_cmd(
|
||||||
elevation_method: Optional[ElevationMethod] = None,
|
elevation_method: Optional[ElevationMethod] = None,
|
||||||
stdout: Optional[FileDescriptor] = None,
|
stdout: Optional[FileDescriptor] = None,
|
||||||
stderr: Optional[FileDescriptor] = None,
|
stderr: Optional[FileDescriptor] = None,
|
||||||
|
stdin: Optional[FileDescriptor] = None,
|
||||||
|
stdin_input: Optional[str] = None,
|
||||||
|
check: Optional[bool] = None,
|
||||||
) -> Union[CompletedProcess, int]:
|
) -> Union[CompletedProcess, int]:
|
||||||
"execute `script` as `switch_user`, elevating and su'ing as necessary"
|
"execute `script` as `switch_user`, elevating and su'ing as necessary"
|
||||||
kwargs: dict = {}
|
kwargs: dict = {}
|
||||||
|
@ -111,6 +114,10 @@ def run_cmd(
|
||||||
for name, fd in {'stdout': stdout, 'stderr': stderr}.items():
|
for name, fd in {'stdout': stdout, 'stderr': stderr}.items():
|
||||||
if fd is not None:
|
if fd is not None:
|
||||||
kwargs[name] = fd
|
kwargs[name] = fd
|
||||||
|
for name, value in {'stdin': stdin, 'input': stdin_input, 'check': check}.items():
|
||||||
|
if value is not None:
|
||||||
|
kwargs[name] = value
|
||||||
|
|
||||||
script = flatten_shell_script(script)
|
script = flatten_shell_script(script)
|
||||||
if cwd:
|
if cwd:
|
||||||
kwargs['cwd'] = cwd
|
kwargs['cwd'] = cwd
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue