Crate subprocess
source · [−]Expand description
Execution of and interaction with external processes and pipelines.
The entry points to the crate are the Popen
struct and the Exec
builder. Popen
is the interface to a running child process, inspired by
Python’s subprocess.Popen
. Exec
provides a builder-pattern API with
convenient methods for streaming and capturing of output, as well as
combining Popen
instances into pipelines.
Compared to std::process
, the module follows the following
additional features:
-
The communicate family of methods for deadlock-free capturing of subprocess output/error, while simultaneously feeding data to its standard input. Capturing supports optional timeout and read size limit.
-
Connecting multiple commands into OS-level pipelines.
-
Flexible redirection options, such as connecting standard streams to arbitary open files, or merging output streams like shell’s
2>&1
and1>&2
operators. -
Non-blocking and timeout methods to wait on the process:
poll
,wait
, andwait_timeout
.
Examples
Communicate with a process and optionally terminate it:
let mut p = Popen::create(&["ps", "x"], PopenConfig {
stdout: Redirection::Pipe, ..Default::default()
})?;
// Obtain the output from the standard streams.
let (out, err) = p.communicate(None)?;
if let Some(exit_status) = p.poll() {
// the process has finished
} else {
// it is still running, terminate it
p.terminate()?;
}
Use the Exec
builder to execute a pipeline of commands and
capture the output:
let dir_checksum = {
Exec::shell("find . -type f") | Exec::cmd("sort") | Exec::cmd("sha1sum")
}.capture()?.stdout_str();
Modules
Subprocess extensions for Unix platforms.
Structs
Data captured by Exec::capture
and Pipeline::capture
.
Error during communication.
Unattended data exchange with the subprocess.
Interface to a running subprocess.
Options for Popen::create
.
Enums
Exit status of a process.
Error in Popen
calls.
Instruction what to do with a stream in the child process.
Functions
Create a pipe.
Type Definitions
Result returned by calls in the subprocess
crate in places where
::std::io::Result
does not suffice.