Dou*_*oug 1 rust rust-obsolete
这个问题是指2014年10月的Rust.
如果您使用的是Rust 1.0或更高版本,那么最好在别处寻找解决方案.
我有一个长时间运行的Rust进程,它生成日志值,我正在使用Process运行.
虽然我可能会定期"检查"正在运行的进程set_timeout()并使用wait()和执行某种高级循环,例如:
let mut child = match Command::new("thing").arg("...").spawn() {
Ok(child) => child,
Err(e) => fail!("failed to execute child: {}", e),
};
loop {
child.set_timeout(Some(100));
match child.wait() {
// ??? Something goes here
}
}
Run Code Online (Sandbox Code Playgroud)
我不是百分之百的事情是; 我如何区分超时错误和进程返回错误之间的区别wait(),以及如何使用PipeStream"尽可能多地读取而不阻塞流"每个推出间隔.
这是最好的方法吗?我应该开始监视stdout和stderr的任务吗?
为了区分进程中的错误和超时,您必须从wait管理返回,这里的示例如下:
fn run() {
let mut child = match Command::new("sleep").arg("1").spawn() {
Ok(child) => child,
Err(e) => fail!("failed to execute child: {}", e),
};
loop {
child.set_timeout(Some(1000));
match child.wait() {
// Here assume any error is timeout, you can filter from IoErrorKind
Err(..) => println!("Timeout"),
Ok(ExitStatus(0)) => {
println!("Finished without errors");
return;
}
Ok(ExitStatus(a)) => {
println!("Finished with error number: {}", a);
return;
}
Ok(ExitSignal(a)) => {
println!("Terminated by signal number: {}", a);
return;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
关于使用流,检查wait_with_output,或使用通道和线程实现类似的东西:http://doc.rust-lang.org/src/std/home/rustbuild/src/rust-buildbot/slave/nightly-linux/build /src/libstd/io/process.rs.html#601
希望它有所帮助
| 归档时间: |
|
| 查看次数: |
827 次 |
| 最近记录: |