[英]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.