smol/examples/process-output.rs

36 lines
955 B
Rust
Raw Normal View History

2020-04-21 15:51:07 +00:00
// TODO: document
2020-04-01 19:40:27 +00:00
use std::env;
2020-04-20 15:45:14 +00:00
use std::process::{Command, Stdio};
2020-03-26 13:57:06 +00:00
2020-04-01 19:40:27 +00:00
use futures::io;
2020-04-20 15:45:14 +00:00
use futures::prelude::*;
2020-04-01 19:40:27 +00:00
use smol::blocking;
fn main() -> io::Result<()> {
smol::run(async {
let mut args = env::args().skip(1);
let mut cmd = Command::new(args.next().expect("missing program name"));
for arg in args {
cmd.arg(arg);
}
cmd.stdout(Stdio::piped());
cmd.stderr(Stdio::piped());
let mut child = cmd.spawn()?;
let child_out = smol::reader(child.stdout.take().unwrap());
let child_err = smol::reader(child.stderr.take().unwrap());
let mut stdout = smol::writer(std::io::stdout());
let mut stderr = smol::writer(std::io::stderr());
future::try_join(
io::copy(child_out, &mut stdout),
io::copy(child_err, &mut stderr),
2020-04-20 15:45:14 +00:00
)
.await?;
2020-04-01 19:40:27 +00:00
println!("{}", blocking!(child.wait())?);
Ok(())
})
2020-03-31 16:04:16 +00:00
}