簡體   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