如何让Rust命令实际输出到stdout?

qnyhuwrf  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(186)

此问题在此处已有答案

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?

sr4lhrrt

sr4lhrrt1#

从文档中:
将命令作为子进程执行,等待它完成并收集其所有输出。
因此,您在command_example变量中获得了进程的所有标准输出。终端中没有显示任何内容,因为这些都是收集的。
或者,您可以使用.status()来代替.output(),以便在不捕获其标准输出的情况下运行进程;然后它将显示在终端中。

相关问题