繁体   English   中英

没有来自 std::process::Command 的 output

[英]No output from std::process::Command

我想使用 process::Command 运行 clippy,但它似乎不起作用。

我在此基础上运行了 cargo build:

use std::env;
use std::process::Command;
use std::io;
use std::io::Write;

fn main() {
    let pwd = env::current_dir();
    match pwd {
        Ok(data) => {
            println!("{}", &data.display());
            let output = Command::new("cargo")
            .arg("clippy")
            .output()
            .expect("there was an error");

            io::stdout().write_all(&output.stdout).unwrap();
        },
        Err(_) => (),
    }
}

然后在另一个 rust 项目的根目录中执行二进制文件。 但我似乎没有得到任何 output。 我试过用ls替换cargo clippy并且运行正常。 正确列出该目录中的所有文件。

有任何想法吗?

就像 mcarton 指出的cargo clippy不会将任何内容打印到标准输出。 只到标准错误。 因此添加 stderr 的 output 会打印更多文本:

use std::env;
use std::process::Command;
use std::io;
use std::io::Write;

fn main() {
    let pwd = env::current_dir();
    match pwd {
        Ok(data) => {
            println!("{}", &data.display());
            let output = Command::new("cargo")
                .arg("clippy")
                .output()
                .expect("there was an error");

            io::stdout().write_all(&output.stdout).unwrap();
            // add this line to print stderr output too
            io::stderr().write_all(&output.stderr).unwrap();
        },
        Err(_) => (),
    }
}

在上面的示例中,我们将 output 的 stderr 的output写入我们的应用程序 stderr。

output.stderr -> app.stderr:

io::stderr().write_all(&output.stderr).unwrap();

如果我们想将它写入标准输出,我们可以使用。

output.stderr -> app.stdout:

io::stdout().write_all(&output.stderr).unwrap();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM