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