SubprocessCommand - libvcs._internal.subprocess¶
Invocable subprocess wrapper.
Defer running a subprocess, such as by handing to an executor.
Note
This is an internal API not covered by versioning policy.
Examples
SubprocessCommand: Wrapssubprocess.Popenandsubprocess.run()in adataclass().Before:
>>> import subprocess >>> subprocess.run( ... ['echo', 'hi'], ... capture_output=True, universal_newlines=True ... ).stdout 'hi\n'
With this:
>>> cmd = SubprocessCommand(['echo', 'hi']) >>> cmd.args ['echo', 'hi'] >>> cmd.run(capture_output=True, universal_newlines=True).stdout 'hi\n'
Tweak params before invocation:
>>> cmd = SubprocessCommand(['echo', 'hi']) >>> cmd.args[1] = 'hello' >>> cmd.args ['echo', 'hello'] >>> cmd.run(capture_output=True, universal_newlines=True).stdout 'hello\n'
Bases:
Exception
Command
Bases:
SkipDefaultFieldsReprMixinWraps a
subprocessrequest. Inspect, mutate, control before invocation.Examples
>>> cmd = SubprocessCommand("ls") >>> cmd.args 'ls'
With
shell=True:>>> cmd = SubprocessCommand("ls -l", shell=True) >>> cmd.shell True >>> cmd.args 'ls -l' >>> cmd.check_call() 0
-
__init__(args, bufsize=-1, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=True, shell=False, cwd=None, env=None, creationflags=0, startupinfo=None, restore_signals=True, start_new_session=False, pass_fds=(), umask=-1, pipesize=-1, user=None, group=None, extra_groups=None, universal_newlines=None, text=None, encoding=None, errors=None)¶method[source]
- Parameters:
- Return type:
Run commands
subprocess.Popen, optionally overrides via kwargs.- Parameters:
**kwargs (dict, optional) – Overrides existing attributes for
subprocess.Popen
Examples
>>> cmd = SubprocessCommand(args=['echo', 'hello']) >>> proc = cmd.Popen(stdout=subprocess.PIPE) >>> proc.communicate()
Run command
subprocess.check_call(), optionally overrides via kwargs.- Parameters:
**kwargs (dict, optional) – Overrides existing attributes for
subprocess.check_call()- Return type:
Examples
>>> cmd = SubprocessCommand(args=['echo', 'hello']) >>> cmd.check_call(stdout=subprocess.PIPE) 0
Run command
subprocess.check_output(), optionally override via kwargs.- Parameters:
input (t.Union[bytes, str], optional) –
pass string to subprocess’s stdin. Bytes by default, str in text mode.
Text mode is triggered by setting any of text, encoding, errors or universal_newlines.
**kwargs (dict, optional) – Overrides existing attributes for
subprocess.check_output()
Examples
>>> cmd = SubprocessCommand(args=['echo', 'hello']) >>> proc = cmd.check_output(shell=True)
Examples from
subprocess:>>> import subprocess >>> cmd = SubprocessCommand( ... ["/bin/sh", "-c", "ls -l non_existent_file ; exit 0"]) >>> cmd.check_output(stderr=subprocess.STDOUT) b"ls: ...non_existent_file...: No such file or directory\n"
>>> cmd = SubprocessCommand(["sed", "-e", "s/foo/bar/"]) >>> cmd.check_output(input=b"when in the course of fooman events\n") b'when in the course of barman events\n'
Run command in
subprocess.run(), optionally overrides via kwargs.- Parameters:
input (t.Union[bytes, str], optional) –
pass string to subprocess’s stdin. Bytes by default, str in text mode.
Text mode is triggered by setting any of text, encoding, errors or universal_newlines.
check (bool) – If True and the exit code was non-zero, it raises a
subprocess.CalledProcessError. The CalledProcessError object will have the return code in the returncode attribute, and output & stderr attributes if those streams were captured.timeout (int) – If given, and the process takes too long, a
subprocess.TimeoutExpired**kwargs (dict, optional) – Overrides existing attributes for
subprocess.run()
Examples
>>> import subprocess >>> cmd = SubprocessCommand( ... ["/bin/sh", "-c", "ls -l non_existent_file ; exit 0"]) >>> cmd.run() CompletedProcess(args=['/bin/sh', '-c', 'ls -l non_existent_file ; exit 0'], returncode=0)
>>> import subprocess >>> cmd = SubprocessCommand( ... ["/bin/sh", "-c", "ls -l non_existent_file ; exit 0"]) >>> cmd.run(check=True) CompletedProcess(args=['/bin/sh', '-c', 'ls -l non_existent_file ; exit 0'], returncode=0)
>>> cmd = SubprocessCommand(["sed", "-e", "s/foo/bar/"]) >>> completed = cmd.run(input=b"when in the course of fooman events\n") >>> completed CompletedProcess(args=['sed', '-e', 's/foo/bar/'], returncode=0) >>> completed.stderr
>>> cmd = SubprocessCommand(["sed", "-e", "s/foo/bar/"]) >>> completed = cmd.run(input=b"when in the course of fooman events\n", ... capture_output=True) >>> completed CompletedProcess(args=['sed', '-e', 's/foo/bar/'], returncode=0, stdout=b'when in the course of barman events\n', stderr=b'') >>> completed.stdout b'when in the course of barman events\n' >>> completed.stderr b''