[][src]Struct grep_cli::CommandReader

pub struct CommandReader { /* fields omitted */ }

A streaming reader for a command's output.

The purpose of this reader is to provide an easy way to execute processes whose stdout is read in a streaming way while also making the processes' stderr available when the process fails with an exit code. This makes it possible to execute processes while surfacing the underlying failure mode in the case of an error.

Moreover, by default, this reader will asynchronously read the processes' stderr. This prevents subtle deadlocking bugs for noisy processes that write a lot to stderr. Currently, the entire contents of stderr is read on to the heap.

Example

This example shows how to invoke gzip to decompress the contents of a file. If the gzip command reports a failing exit status, then its stderr is returned as an error.

use std::io::Read;
use std::process::Command;
use grep_cli::CommandReader;

let mut cmd = Command::new("gzip");
cmd.arg("-d").arg("-c").arg("/usr/share/man/man1/ls.1.gz");

let mut rdr = CommandReader::new(&mut cmd)?;
let mut contents = vec![];
rdr.read_to_end(&mut contents)?;

Methods

impl CommandReader[src]

pub fn new(cmd: &mut Command) -> Result<CommandReader, CommandError>[src]

Create a new streaming reader for the given command using the default configuration.

The caller should set everything that's required on the given command before building a reader, such as its arguments, environment and current working directory. Settings such as the stdout and stderr (but not stdin) pipes will be overridden so that they can be controlled by the reader.

If there was a problem spawning the given command, then its error is returned.

If the caller requires additional configuration for the reader returned, then use CommandReaderBuilder.

Trait Implementations

impl Debug for CommandReader[src]

impl Read for CommandReader[src]

Auto Trait Implementations

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.