diff options
author | Jesse Luehrs <doy@tozt.net> | 2019-10-24 15:16:10 -0400 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2019-10-24 15:16:10 -0400 |
commit | 894ec4f24c1269166f14c05b2ae3f737f76dd571 (patch) | |
tree | b30021b97dee11d1d5976561c42bd2cc59ee8762 /examples/shell.rs | |
parent | 090b50a13f0d07ae722dd9fe6ef064cd893ff6ec (diff) | |
download | tokio-pty-process-stream-894ec4f24c1269166f14c05b2ae3f737f76dd571.tar.gz tokio-pty-process-stream-894ec4f24c1269166f14c05b2ae3f737f76dd571.zip |
add a couple examples
Diffstat (limited to 'examples/shell.rs')
-rw-r--r-- | examples/shell.rs | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/examples/shell.rs b/examples/shell.rs new file mode 100644 index 0000000..682c008 --- /dev/null +++ b/examples/shell.rs @@ -0,0 +1,41 @@ +use futures::future::Future as _; +use futures::stream::Stream as _; +use std::io::Write as _; + +mod input; + +fn main() { + let mut argv = std::env::args(); + argv.next().unwrap(); + let cmd = argv.next().unwrap(); + let args: Vec<_> = argv.collect(); + + let process = tokio_pty_process_stream::Process::new( + &cmd, + &args, + input::evented_stdin::Stdin::new(), + ); + + let _raw = crossterm::RawScreen::into_raw_mode().unwrap(); + tokio::run( + process + .for_each(|ev| { + match ev { + tokio_pty_process_stream::Event::CommandStart { + .. + } => {} + tokio_pty_process_stream::Event::Output { data } => { + let stdout = std::io::stdout(); + let mut stdout = stdout.lock(); + stdout.write_all(&data).unwrap(); + stdout.flush().unwrap(); + } + tokio_pty_process_stream::Event::CommandExit { + .. + } => {} + } + futures::future::ok(()) + }) + .map_err(|e| panic!(e)), + ); +} |