Struct std::process::Stdio 1.0.0[−][src]
pub struct Stdio(_);
Describes what to do with a standard I/O stream for a child process when
passed to the stdin, stdout, and stderr methods of Command.
Implementations
impl Stdio[src]
impl Stdio[src]pub fn piped() -> Stdio[src]
pub fn piped() -> Stdio[src]A new pipe should be arranged to connect the parent and child processes.
Examples
With stdout:
use std::process::{Command, Stdio}; let output = Command::new("echo") .arg("Hello, world!") .stdout(Stdio::piped()) .output() .expect("Failed to execute command"); assert_eq!(String::from_utf8_lossy(&output.stdout), "Hello, world!\n"); // Nothing echoed to consoleRun
With stdin:
use std::io::Write; use std::process::{Command, Stdio}; let mut child = Command::new("rev") .stdin(Stdio::piped()) .stdout(Stdio::piped()) .spawn() .expect("Failed to spawn child process"); let mut stdin = child.stdin.take().expect("Failed to open stdin"); std::thread::spawn(move || { stdin.write_all("Hello, world!".as_bytes()).expect("Failed to write to stdin"); }); let output = child.wait_with_output().expect("Failed to read stdout"); assert_eq!(String::from_utf8_lossy(&output.stdout), "!dlrow ,olleH");Run
Writing more than a pipe buffer’s worth of input to stdin without also reading stdout and stderr at the same time may cause a deadlock. This is an issue when running any program that doesn’t guarantee that it reads its entire stdin before writing more than a pipe buffer’s worth of output. The size of a pipe buffer varies on different targets.
pub fn inherit() -> Stdio[src]
pub fn inherit() -> Stdio[src]The child inherits from the corresponding parent descriptor.
Examples
With stdout:
use std::process::{Command, Stdio}; let output = Command::new("echo") .arg("Hello, world!") .stdout(Stdio::inherit()) .output() .expect("Failed to execute command"); assert_eq!(String::from_utf8_lossy(&output.stdout), ""); // "Hello, world!" echoed to consoleRun
With stdin:
use std::process::{Command, Stdio}; use std::io::{self, Write}; let output = Command::new("rev") .stdin(Stdio::inherit()) .stdout(Stdio::piped()) .output() .expect("Failed to execute command"); print!("You piped in the reverse of: "); io::stdout().write_all(&output.stdout).unwrap();Run
pub fn null() -> Stdio[src]
pub fn null() -> Stdio[src]This stream will be ignored. This is the equivalent of attaching the
stream to /dev/null.
Examples
With stdout:
use std::process::{Command, Stdio}; let output = Command::new("echo") .arg("Hello, world!") .stdout(Stdio::null()) .output() .expect("Failed to execute command"); assert_eq!(String::from_utf8_lossy(&output.stdout), ""); // Nothing echoed to consoleRun
With stdin:
use std::process::{Command, Stdio}; let output = Command::new("rev") .stdin(Stdio::null()) .stdout(Stdio::piped()) .output() .expect("Failed to execute command"); assert_eq!(String::from_utf8_lossy(&output.stdout), ""); // Ignores any piped-in inputRun
Trait Implementations
impl From<ChildStderr> for Stdio1.20.0[src]
impl From<ChildStderr> for Stdio1.20.0[src]fn from(child: ChildStderr) -> Stdio[src]
fn from(child: ChildStderr) -> Stdio[src]Converts a ChildStderr into a Stdio
Examples
use std::process::{Command, Stdio}; let reverse = Command::new("rev") .arg("non_existing_file.txt") .stderr(Stdio::piped()) .spawn() .expect("failed reverse command"); let cat = Command::new("cat") .arg("-") .stdin(reverse.stderr.unwrap()) // Converted into a Stdio here .output() .expect("failed echo command"); assert_eq!( String::from_utf8_lossy(&cat.stdout), "rev: cannot open non_existing_file.txt: No such file or directory\n" );Run
impl From<ChildStdin> for Stdio1.20.0[src]
impl From<ChildStdin> for Stdio1.20.0[src]fn from(child: ChildStdin) -> Stdio[src]
fn from(child: ChildStdin) -> Stdio[src]Converts a ChildStdin into a Stdio
Examples
ChildStdin will be converted to Stdio using Stdio::from under the hood.
use std::process::{Command, Stdio}; let reverse = Command::new("rev") .stdin(Stdio::piped()) .spawn() .expect("failed reverse command"); let _echo = Command::new("echo") .arg("Hello, world!") .stdout(reverse.stdin.unwrap()) // Converted into a Stdio here .output() .expect("failed echo command"); // "!dlrow ,olleH" echoed to consoleRun
impl From<ChildStdout> for Stdio1.20.0[src]
impl From<ChildStdout> for Stdio1.20.0[src]fn from(child: ChildStdout) -> Stdio[src]
fn from(child: ChildStdout) -> Stdio[src]Converts a ChildStdout into a Stdio
Examples
ChildStdout will be converted to Stdio using Stdio::from under the hood.
use std::process::{Command, Stdio}; let hello = Command::new("echo") .arg("Hello, world!") .stdout(Stdio::piped()) .spawn() .expect("failed echo command"); let reverse = Command::new("rev") .stdin(hello.stdout.unwrap()) // Converted into a Stdio here .output() .expect("failed reverse command"); assert_eq!(reverse.stdout, b"!dlrow ,olleH\n");Run
impl From<File> for Stdio1.20.0[src]
impl From<File> for Stdio1.20.0[src]fn from(file: File) -> Stdio[src]
fn from(file: File) -> Stdio[src]Converts a File into a Stdio
Examples
File will be converted to Stdio using Stdio::from under the hood.
use std::fs::File; use std::process::Command; // With the `foo.txt` file containing `Hello, world!" let file = File::open("foo.txt").unwrap(); let reverse = Command::new("rev") .stdin(file) // Implicit File conversion into a Stdio .output() .expect("failed reverse command"); assert_eq!(reverse.stdout, b"!dlrow ,olleH");Run
impl FromRawFd for Stdio1.2.0[src]
impl FromRawFd for Stdio1.2.0[src]unsafe fn from_raw_fd(fd: RawFd) -> Stdio[src]
unsafe fn from_raw_fd(fd: RawFd) -> Stdio[src]Constructs a new instance of Self from the given raw file
descriptor. Read more
impl FromRawHandle for Stdio1.2.0[src]
impl FromRawHandle for Stdio1.2.0[src]unsafe fn from_raw_handle(handle: RawHandle) -> Stdio[src]
unsafe fn from_raw_handle(handle: RawHandle) -> Stdio[src]Constructs a new I/O object from the specified raw handle. Read more
Auto Trait Implementations
impl RefUnwindSafe for Stdio
impl Send for Stdio
impl Sync for Stdio
impl Unpin for Stdio
impl UnwindSafe for Stdio
Blanket Implementations
impl<T> Borrow<T> for T where
T: ?Sized, [src]
impl<T> Borrow<T> for T where
T: ?Sized, [src]pub fn borrow(&self) -> &TⓘNotable traits for &'_ mut I
impl<'_, I> Iterator for &'_ mut I where
I: Iterator + ?Sized, type Item = <I as Iterator>::Item;impl<'_, F> Future for &'_ mut F where
F: Future + Unpin + ?Sized, type Output = <F as Future>::Output;impl<R: Read + ?Sized> Read for &mut Rimpl<W: Write + ?Sized> Write for &mut W[src]
pub fn borrow(&self) -> &TⓘNotable traits for &'_ mut I
impl<'_, I> Iterator for &'_ mut I where
I: Iterator + ?Sized, type Item = <I as Iterator>::Item;impl<'_, F> Future for &'_ mut F where
F: Future + Unpin + ?Sized, type Output = <F as Future>::Output;impl<R: Read + ?Sized> Read for &mut Rimpl<W: Write + ?Sized> Write for &mut W[src]Immutably borrows from an owned value. Read more
impl<T> BorrowMut<T> for T where
T: ?Sized, [src]
impl<T> BorrowMut<T> for T where
T: ?Sized, [src]pub fn borrow_mut(&mut self) -> &mut TⓘNotable traits for &'_ mut I
impl<'_, I> Iterator for &'_ mut I where
I: Iterator + ?Sized, type Item = <I as Iterator>::Item;impl<'_, F> Future for &'_ mut F where
F: Future + Unpin + ?Sized, type Output = <F as Future>::Output;impl<R: Read + ?Sized> Read for &mut Rimpl<W: Write + ?Sized> Write for &mut W[src]
pub fn borrow_mut(&mut self) -> &mut TⓘNotable traits for &'_ mut I
impl<'_, I> Iterator for &'_ mut I where
I: Iterator + ?Sized, type Item = <I as Iterator>::Item;impl<'_, F> Future for &'_ mut F where
F: Future + Unpin + ?Sized, type Output = <F as Future>::Output;impl<R: Read + ?Sized> Read for &mut Rimpl<W: Write + ?Sized> Write for &mut W[src]Mutably borrows from an owned value. Read more