I'm really new to async in Rust and trying to get my head around it (mostly by trying to forget my knowledge of async Python which does things a bit differently). Am I on the right path with something like this:
let child = match command.spawn() {
Ok(child) => child,
Err(err) => {
slog::error!(logging::get(), "Failed to spawn child process: {:?}", err);
return Err(anyhow!(err));
}
};
let stdout = match child.stdout.take() {
Some(stdout) => stdout,
None => {
slog::error!(logging::get(), "Failed to get child stdout stream",);
return Err(anyhow!("Failed to get child stdout stream"));
}
};
let stderr = match child.stderr.take() {
Some(stderr) => stderr,
None => {
slog::error!(logging::get(), "Failed to get child stderr stream",);
return Err(anyhow!("Failed to get child stderr stream"));
}
};
loop {
select! {
stdo = stdout => println!(stdo),
stde = stderr => eprintln!(stde),
output = child => println!("Done!"),
complete => break,
};
}