我正在尝试开始卷曲下载,然后将它的stdout传送到我的程序的stdout。这是我得到的(仍然使用old_io):
let process = Command::new("curl")
.arg("-o ").arg(&self.filename).arg(&self.url)
.spawn().ok().expect("Download failed.");
let output = process.wait_with_output().ok().expect("Download failed.");
完美无缺,但卷曲下载需要相当长的时间。因此,当它仍在下载时,显示curl的stdout(=>下载进度)会很简洁,而不仅仅是在最后。我尝试过很多东西,但是不能让这个东西起作用。有什么想法吗?
答案 0 :(得分:1)
不要使用wait_with_output
,而只需从process
的管道中读取。当您无法再阅读时,您可以等待该过程。这是一个没有错误处理的例子:
#![feature(old_io)]
use std::old_io::process::Command;
use std::old_io::stdio;
fn main() {
let mut process = Command::new("bash")
.arg("-c")
.arg("for i in 1 2 3 4 5; do echo start-$i; sleep 1; echo stop-$i; done")
.spawn()
.ok()
.expect("Command failed");
let buf = &mut [0; 256];
while let Ok(bytes) = process.stdout.as_mut().unwrap().read(buf) {
stdio::stdout_raw().write_all(&buf[..bytes]).unwrap();
}
let _ = process.wait_with_output().ok().expect("Download failed.");
}