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
|
#![cfg(feature = "std")]
use io_process::{
command::Command,
coroutines::spawn_then_wait::{SpawnThenWait, SpawnThenWaitResult},
runtimes::std::handle,
};
use tempfile::tempdir;
fn main() {
env_logger::init();
let workdir = tempdir().unwrap();
let mut command = Command::new("touch");
command.arg(workdir.path().join("file.tmp").to_string_lossy());
println!("spawn: {command:#?}");
println!();
let mut arg = None;
let mut spawn = SpawnThenWait::new(command);
let status = loop {
match spawn.resume(arg.take()) {
SpawnThenWaitResult::Ok(output) => break output,
SpawnThenWaitResult::Io(io) => arg = Some(handle(io).unwrap()),
SpawnThenWaitResult::Err(err) => panic!("{err}"),
}
};
println!("exit status: {status:#?}");
}
|