【发布时间】:2015-11-06 15:46:57
【问题描述】:
我相信我一般理解这样做的一种方式:
- 创建
Command - 使用
Stdio::piped()创建一对新的输出流 - 配置
command.stdout()和command.stderr() - 产生进程
- 创建一个新线程并将标准错误和标准输出传递给它
- 在远程线程中,不断轮询输入并将其写入输出流。
- 在主线程中,等待进程完成。
听起来对吗?
我的两个实际问题:
有没有更简单的方法不涉及每个进程的“读取线程”?
如果没有更简单的方法,
Read::read()需要&mut self;你如何将它传递给远程线程?
请提供具体示例说明如何实际流式传输输出,而不仅仅是关于如何做的一般性建议...
更具体地说,这里是the default example of using spawn:
use std::process::Command;
let mut child = Command::new("/bin/cat")
.arg("file.txt")
.spawn()
.expect("failed to execute child");
let ecode = child.wait()
.expect("failed to wait on child");
assert!(ecode.success());
如何更改上面的示例以将 child 的输出流式传输到控制台,而不仅仅是等待退出代码?
【问题讨论】:
-
在一般情况下,为了给对话提供一个起点,最好让 OP(你)提供尽可能少的代码示例来展示问题,然后询问如何解决说问题。例如,您可以将“这样做的一种方式”转换为代码示例。
-
我很乐意接受任何生成长时间运行的进程并将输出流式传输到控制台的示例,无论以何种方式。
标签: rust