[−][src]Struct grep_cli::CommandReader
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]
fn read(&mut self, buf: &mut [u8]) -> Result<usize>
[src]
default fn read_vectored(
&mut self,
bufs: &mut [IoVecMut]
) -> Result<usize, Error>
[src]
&mut self,
bufs: &mut [IoVecMut]
) -> Result<usize, Error>
iovec
)Like read
, except that it reads into a slice of buffers. Read more
unsafe default fn initializer(&self) -> Initializer
[src]
read_initializer
)Determines if this Read
er can work with buffers of uninitialized memory. Read more
default fn read_to_end(&mut self, buf: &mut Vec<u8>) -> Result<usize, Error>
1.0.0[src]
Read all bytes until EOF in this source, placing them into buf
. Read more
default fn read_to_string(&mut self, buf: &mut String) -> Result<usize, Error>
1.0.0[src]
Read all bytes until EOF in this source, appending them to buf
. Read more
default fn read_exact(&mut self, buf: &mut [u8]) -> Result<(), Error>
1.6.0[src]
Read the exact number of bytes required to fill buf
. Read more
default fn by_ref(&mut self) -> &mut Self
1.0.0[src]
Creates a "by reference" adaptor for this instance of Read
. Read more
default fn bytes(self) -> Bytes<Self>
1.0.0[src]
Transforms this Read
instance to an [Iterator
] over its bytes. Read more
default fn chain<R>(self, next: R) -> Chain<Self, R> where
R: Read,
1.0.0[src]
R: Read,
Creates an adaptor which will chain this stream with another. Read more
default fn take(self, limit: u64) -> Take<Self>
1.0.0[src]
Creates an adaptor which will read at most limit
bytes from it. Read more
Auto Trait Implementations
impl Send for CommandReader
impl Sync for CommandReader
Blanket Implementations
impl<T> From for T
[src]
impl<T, U> Into for T where
U: From<T>,
[src]
U: From<T>,
impl<T, U> TryFrom for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T> Borrow for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> BorrowMut for T where
T: ?Sized,
[src]
T: ?Sized,
fn borrow_mut(&mut self) -> &mut T
[src]
impl<T, U> TryInto for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,