有没有一种方法来调用系统命令,像ls
或fuser
鲁斯特?如何捕获其输出?
Answers:
有多种方法可以生成子进程并在计算机上执行任意命令:
文档中的一个简单示例:
use std::process::Command;
Command::new("ls")
.arg("-l")
.arg("-a")
.spawn()
.expect("ls command failed to start");
来自docs的非常清楚的示例:
use std::process::Command;
let output = Command::new("/bin/cat")
.arg("file.txt")
.output()
.expect("failed to execute process");
println!("status: {}", output.status);
println!("stdout: {}", String::from_utf8_lossy(&output.stdout));
println!("stderr: {}", String::from_utf8_lossy(&output.stderr));
assert!(output.status.success());
确实有可能!相关模块为std::run
。
let mut options = std::run::ProcessOptions::new();
let process = std::run::Process::new("ls", &[your, arguments], options);
ProcessOptions
'标准文件描述符默认为None
(创建一个新管道),因此您可以使用process.output()
(例如)从其输出中读取。
如果你想运行的命令,并获得其所有的输出,它的完成之后,还有wait_with_output
为。
Process::new
,截至昨天,顺便返回Option<Process>
而不是Process
。
std::io::process
(下面的答案)。
std::process
现在的rustc 1.19.0的。
output
函数完成处理后会返回Vec。因此,以防万一我们运行类似的内容Command("ping google.com")
。是否有可能获得此命令的输出,因为它不会完成,但是我想打印其日志。请提出建议。