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, modeled after Python’s subprocess.Popen, with
modifications to make it fit to Rust. Exec provides a Rustic
builder-style 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
communicatemethod for deadlock-free reading of subprocess output/error, while simultaneously providing it stdin. -
Advanced redirection options, such as connecting standard streams to arbitary open files, or merging output streams like shell’s
2>&1and1>&2operators. -
Non-blocking and timeout methods to wait on the process:
poll,wait, andwait_timeout. -
Connecting multiple commands into OS-level pipelines.
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
Structs
Exec::capture and Pipeline::capture.Popen::create.Enums
Popen calls.Functions
Type Definitions
subprocess crate in places where
::std::io::Result does not suffice.