是否有方法调用系统命令,如 Rust 中的 ls或 fuser? 如何捕获它的输出?
ls
fuser
这确实是可能的! 相关的模块是 std::run。
std::run
let mut options = std::run::ProcessOptions::new(); let process = std::run::Process::new("ls", &[your, arguments], options);
ProcessOptions的标准文件描述符 默认值为 None(创建一个新管道) ,所以您可以只使用 process.output()(例如)从它的输出中读取。
ProcessOptions
None
process.output()
如果您希望运行该命令并在完成之后获得其所有输出,有 wait_with_output的。
wait_with_output
顺便说一句,从昨天开始,Process::new返回的是 Option<Process>而不是 Process。
Process::new
Option<Process>
Process
std::process::Command 考虑到这一点。
std::process::Command
有多种方法可以产生子进程并在机器上执行任意命令:
spawn
output
status
来自文档的一个简单例子:
use std::process::Command; Command::new("ls") .arg("-l") .arg("-a") .spawn() .expect("ls command failed to start");
来自 医生的一个非常明显的例子:
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());