1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
|
#![cfg(feature = "std")]
use std::process::Stdio;
use io_process::{
command::Command,
coroutines::{
spawn_then_wait::{SpawnThenWait, SpawnThenWaitResult},
spawn_then_wait_with_output::{SpawnThenWaitWithOutput, SpawnThenWaitWithOutputResult},
},
runtimes::std::handle,
};
fn main() {
env_logger::init();
let mut command = Command::new("/bin/sh");
command.arg("-c");
command.arg("read line; echo $line");
command.stdin(Stdio::inherit());
command.stdout(Stdio::piped());
println!("spawn 1: {command:#?}");
println!();
println!("What is your name? ");
let mut arg = None;
let mut spawn = SpawnThenWait::new(command);
let (status, stdout) = loop {
match spawn.resume(arg.take()) {
SpawnThenWaitResult::Ok(output) => break (output.status, output.stdout.unwrap()),
SpawnThenWaitResult::Io(io) => arg = Some(handle(io).unwrap()),
SpawnThenWaitResult::Err(err) => panic!("{err}"),
}
};
println!();
println!("status: {status:#?}");
println!();
let mut command = Command::new("cat");
command.arg("-E");
command.stdin(stdout);
println!("command 2: {command:#?}");
println!();
let mut arg = None;
let mut spawn = SpawnThenWaitWithOutput::new(command);
let output = loop {
match spawn.resume(arg) {
SpawnThenWaitWithOutputResult::Ok(output) => break output,
SpawnThenWaitWithOutputResult::Io(io) => arg = Some(handle(io).unwrap()),
SpawnThenWaitWithOutputResult::Err(err) => panic!("{err}"),
}
};
println!("output: {output:#?}")
}
|