about summary refs log tree commit diff
path: root/src/libstd/process.rs
diff options
context:
space:
mode:
authorRobin Stocker <robin@nibor.org>2017-02-27 17:01:47 +1100
committerRobin Stocker <robin@nibor.org>2017-02-27 17:04:18 +1100
commit8079bf35c596eef32ec872d35e28c90e4744f61e (patch)
tree3b8a00fbdef13ce1e929bf61aa2cca5dc1c6f494 /src/libstd/process.rs
parent60a0edc6c223a19d5288c90b0e7fbc85d6701ddc (diff)
downloadrust-8079bf35c596eef32ec872d35e28c90e4744f61e.tar.gz
rust-8079bf35c596eef32ec872d35e28c90e4744f61e.zip
Example for how to provide stdin using std::process::Command
Spawning a child process and writing to its stdin is a bit tricky due to
`as_mut` and having to use a limited borrow. An example for this might
help newer users.
Diffstat (limited to 'src/libstd/process.rs')
-rw-r--r--src/libstd/process.rs25
1 files changed, 25 insertions, 0 deletions
diff --git a/src/libstd/process.rs b/src/libstd/process.rs
index 4ff35738b50..f846ef3e69e 100644
--- a/src/libstd/process.rs
+++ b/src/libstd/process.rs
@@ -27,6 +27,31 @@
 //!
 //! assert!(ecode.success());
 //! ```
+//!
+//! Calling a command with input and reading its output:
+//!
+//! ```no_run
+//! use std::process::{Command, Stdio};
+//! use std::io::Write;
+//!
+//! let mut child = Command::new("/bin/cat")
+//!     .stdin(Stdio::piped())
+//!     .stdout(Stdio::piped())
+//!     .spawn()
+//!     .expect("failed to execute child");
+//!
+//! {
+//!     // limited borrow of stdin
+//!     let stdin = child.stdin.as_mut().expect("failed to get stdin");
+//!     stdin.write_all(b"test").expect("failed to write to stdin");
+//! }
+//!
+//! let output = child
+//!     .wait_with_output()
+//!     .expect("failed to wait on child");
+//!
+//! assert_eq!(b"test", output.stdout.as_slice());
+//! ```
 
 #![stable(feature = "process", since = "1.0.0")]