Crate devx_cmd[−][src]
Expand description
devx-cmd
provides more convenient primitives for spawning child processes
than std::process
targeted for use in development scripts specifically.
The main entities of the crate are Cmd
(builder for executable
commands), and Child
(represents a spawned process).
There are also some convenient macros to reduce boilerplate. Here is the basic usage example:
use devx_cmd::{read, run, cmd, Cmd}; // Initialize some low-overhead logger implementation for the `log` crate simple_logger::SimpleLogger::new().init().unwrap(); // Run the program, logging the invocation via [`log`] crate and waiting until it finishes // This is used only for side-effects. // Note that if the process ends with a non-zero status code, this will return an error. run!("ls", "-la")?; // Same as `run!()`, but captures the stdout and returns it as a `String` // there is also a `read_bytes!()` for non-utf8 sequences let output = read!("echo", "foo")?; assert_eq!(output.trim(), "foo"); let mut cmd = cmd!("rustfmt"); cmd // Set `trace` level for logging command invocation and output (`debug` by default) .log_cmd(log::Level::Trace) // Don't log error if the command fails .log_err(None) .stdin("fn foo () -> u32 {42}\n"); // Spawn without waiting for its completion, but capturing the stdout let mut child = cmd.spawn_piped()?; // Read output line-by-line let first_line = child.stdout_lines().next().unwrap(); assert_eq!(first_line.trim(), "fn foo() -> u32 {"); // Dropping the child process `kill()`s it (and ignores the `Result`) // Use `.wait()/.read()` to wait until its completion. drop(child);
Macros
cmd | Create a |
read | Shortcut for |
read_bytes | Shortcut for |
run | Shortcut for |
Structs
Child | Wraps |
Cmd | More convenient version of |
Error | Opaque error which happened during command execution. |
Enums
Ostream | Defines the kind of standard process output stream. |
Type Definitions
Result | Shortcut for |