一般来说,我相信我理解这样做的一种方式:
CommandStdio::piped()创建一个新的对输出流command.stdout(),和command.stderr()听起来不错吗?
我的两个实际问题:
是否有一种更简单的方法,不涉及每个进程的"读取线程"?
如果没有更简单的方法,Read::read()需要&mut self; 你如何将它传递到远程线程?
请提供有关如何实际流式传输输出的具体示例,而不仅仅是有关如何执行此操作的通用建议...
更具体地说,这是使用的默认示例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());
Run Code Online (Sandbox Code Playgroud)
如何更改上面的示例以将child的输出流式传输到控制台,而不是仅仅等待退出代码?
使用Command struct,如何向 stdout 和 stderr 缓冲区添加前缀?
我希望输出看起来像这样:
[stdout] things are good.
[sterr] fatal: repository does not exist.
Run Code Online (Sandbox Code Playgroud)
这也很适合应用于程序的主标准输出,因此程序打印的任何内容都带有这样的前缀。
这是我目前拥有的代码:
let output = Command::new("git").arg("clone").output().unwrap_or_else(|e| {
panic!("Failed to run git clone: {}", e)
});
Run Code Online (Sandbox Code Playgroud) rust ×2