Skip to content

Commit

Permalink
Auto merge of #32338 - lukaspustina:doc-std-process, r=alexcrichton
Browse files Browse the repository at this point in the history
Extends rustdoc on how to caputure output

- The documentation is quite about how to caputure a process' output when using
  ` std::process::Child::wait_with_output()`.
- This PR adds an example for this particular use case.
  • Loading branch information
bors committed Apr 15, 2016
2 parents ccc7e95 + 5613372 commit 9debf51
Showing 1 changed file with 37 additions and 11 deletions.
48 changes: 37 additions & 11 deletions src/libstd/process.rs
Original file line number Diff line number Diff line change
Expand Up @@ -38,10 +38,10 @@ use sys_common::{AsInner, AsInnerMut, FromInner, IntoInner};
/// let mut child = Command::new("/bin/cat")
/// .arg("file.txt")
/// .spawn()
/// .unwrap_or_else(|e| { panic!("failed to execute child: {}", e) });
/// .expect("failed to execute child");
///
/// let ecode = child.wait()
/// .unwrap_or_else(|e| { panic!("failed to wait on child: {}", e) });
/// .expect("failed to wait on child");
///
/// assert!(ecode.success());
/// ```
Expand Down Expand Up @@ -195,7 +195,8 @@ impl FromInner<AnonPipe> for ChildStderr {
/// .arg("-c")
/// .arg("echo hello")
/// .output()
/// .unwrap_or_else(|e| { panic!("failed to execute process: {}", e) });
/// .expect("failed to execute proces");
///
/// let hello = output.stdout;
/// ```
#[stable(feature = "process", since = "1.0.0")]
Expand Down Expand Up @@ -305,15 +306,16 @@ impl Command {
///
/// # Examples
///
/// ```
/// ```should_panic
/// use std::process::Command;
/// let output = Command::new("cat").arg("foo.txt").output().unwrap_or_else(|e| {
/// panic!("failed to execute process: {}", e)
/// });
/// let output = Command::new("/bin/cat").arg("file.txt").output()
/// .expect("failed to execute process");
///
/// println!("status: {}", output.status);
/// println!("stdout: {}", String::from_utf8_lossy(&output.stdout));
/// println!("stderr: {}", String::from_utf8_lossy(&output.stderr));
///
/// assert!(output.status.success());
/// ```
#[stable(feature = "process", since = "1.0.0")]
pub fn output(&mut self) -> io::Result<Output> {
Expand All @@ -328,14 +330,15 @@ impl Command {
///
/// # Examples
///
/// ```
/// ```should_panic
/// use std::process::Command;
///
/// let status = Command::new("ls").status().unwrap_or_else(|e| {
/// panic!("failed to execute process: {}", e)
/// });
/// let status = Command::new("/bin/cat").arg("file.txt").status()
/// .expect("failed to execute process");
///
/// println!("process exited with: {}", status);
///
/// assert!(status.success());
/// ```
#[stable(feature = "process", since = "1.0.0")]
pub fn status(&mut self) -> io::Result<ExitStatus> {
Expand Down Expand Up @@ -499,6 +502,29 @@ impl Child {
/// before waiting. This helps avoid deadlock: it ensures that the
/// child does not block waiting for input from the parent, while
/// the parent waits for the child to exit.
///
/// By default, stdin, stdout and stderr are inherited from the parent.
/// In order to capture the output into this `Result<Output>` it is
/// necessary to create new pipes between parent and child. Use
/// `stdout(Stdio::piped())` or `stderr(Stdio::piped())`, respectively.
///
/// # Examples
///
/// ```should_panic
/// use std::process::{Command, Stdio};
///
/// let mut child = Command::new("/bin/cat")
/// .arg("file.txt")
/// .stdout(Stdio::piped())
/// .spawn()
/// .expect("failed to execute child");
///
/// let ecode = child.wait_with_output()
/// .expect("failed to wait on child");
///
/// assert!(ecode.status.success());
/// ```
///
#[stable(feature = "process", since = "1.0.0")]
pub fn wait_with_output(mut self) -> io::Result<Output> {
drop(self.stdin.take());
Expand Down

0 comments on commit 9debf51

Please sign in to comment.