libvcs._internal.subprocess
#
Invokable 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.Popen
andsubprocess.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'
- class libvcs._internal.subprocess.SubprocessCommand#
Encapsulate a
subprocess
request. Inspect, mutate, control before invocation.- args#
A string, or a sequence of program arguments.
- Type:
_CMD
- bufsize#
supplied as the buffering argument to the open() function when creating the stdin/stdout/stderr pipe file objects
- Type:
- executable#
A replacement program to execute.
- Type:
Optional[StrOrBytesPath]
- stdin#
standard output for executed program
- Type:
_FILE
- stdout#
standard output for executed program
- stderr#
standard output for executed program
- close_fds#
- Type:
Controls closing or inheriting of file descriptors.
- shell#
- Type:
If true, the command will be executed through the shell.
- cwd#
- Type:
Sets the current directory before the child is executed.
- env#
- Type:
Defines the environment variables for the new process.
- text#
If
True
, decode stdin, stdout and stderr using the given encoding (if set) or the system default otherwise.
- universal_newlines#
Alias of text, provided for backwards compatibility.
- startupinfo#
Windows only
- creationflags#
Windows only
- preexec_fn#
(POSIX only) An object to be called in the child process just before the child is executed.
- restore_signals#
POSIX only
- start_new_session#
POSIX only
- group#
POSIX only
- extra_groups#
POSIX only
- user#
POSIX only
- umask#
POSIX only
- pass_fds#
POSIX only
- encoding#
Text mode encoding to use for file objects stdin, stdout and stderr.
- errors#
Text mode error handling to use for file objects stdin, stdout and stderr.
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
- Popen(self, args: Optional[_CMD] = ..., universal_newlines: bool = ..., *, text: Optional[bool] = ..., encoding: str, errors: Optional[str] = ...)#
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()
- check_call(self, **kwargs)#
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
- check_output(self, universal_newlines: bool = ..., *, input: Optional[Union[str, bytes]] = ..., encoding: Optional[str] = ..., errors: Optional[str] = ..., text: Literal[True], **kwargs)#
Run command
subprocess.check_output()
, optionally overrides via kwargs.- Parameters:
input (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(self, universal_newlines: bool = ..., *, capture_output: bool = ..., check: bool = ..., encoding: Optional[str] = ..., errors: Optional[str] = ..., input: Optional[str] = ..., text: Literal[True])#
Run command in
subprocess.run()
, optionally overrides via kwargs.- Parameters:
input (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''