此问题在此处已有答案:
How do I stdout into terminal executing std::process::Command in Rust language(2个答案)
上个月关门了。
我尝试使用Command::process来生成一些进程,开始时我想检查我是否可以让一个简单的命令(如echo
)正确工作。我想接受一些用户输入,然后生成一个进程来将其回显到stdout,这样我就可以验证我是否得到如下响应:
> echo this!
echo this! <-- my echoed text
字符串
目前,我正在尝试这样做:
use std::io;
use std::process::Command;
fn main() {
let mut some_input = String::new();
io::stdin()
.read_line(&mut some_input)
.unwrap();
let command_example = Command::new("echo")
.arg(&some_input)
.output()
.unwrap();
let expected_output = format!("{}\n", &some_input);
assert_eq!(expected_output.as_bytes(), command_example.stdout.as_slice());
}
型assert
块正在传递,所以我可以看到命令的输出最终在结构体的stout缓冲区中。然而,当我在终端中运行这个命令时,没有输出,程序只是结束,没有将任何东西打印回stdout。我做错了什么,这段代码没有将任何东西打印回stdout?
1条答案
按热度按时间sr4lhrrt1#
从文档中:
将命令作为子进程执行,等待它完成并收集其所有输出。
因此,您在
command_example
变量中获得了进程的所有标准输出。终端中没有显示任何内容,因为这些都是收集的。或者,您可以使用
.status()
来代替.output()
,以便在不捕获其标准输出的情况下运行进程;然后它将显示在终端中。