mirror of https://github.com/smol-rs/smol
36 lines
955 B
Rust
36 lines
955 B
Rust
// TODO: document
|
|
use std::env;
|
|
use std::process::{Command, Stdio};
|
|
|
|
use futures::io;
|
|
use futures::prelude::*;
|
|
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),
|
|
)
|
|
.await?;
|
|
|
|
println!("{}", blocking!(child.wait())?);
|
|
Ok(())
|
|
})
|
|
}
|