Rust 打开记事本
【摘要】 在 Rust 中执行外部程序(例如打开记事本)可以使用标准库中的 std::process::Command 结构体。以下是详细示例和说明: 1. 打开记事本(Windows)use std::process::Command;fn main() -> std::io::Result<()> { // Windows 下打开记事本 Command::new("notepad.ex...
在 Rust 中执行外部程序(例如打开记事本)可以使用标准库中的 std::process::Command
结构体。以下是详细示例和说明:
1. 打开记事本(Windows)
use std::process::Command;
fn main() -> std::io::Result<()> {
// Windows 下打开记事本
Command::new("notepad.exe")
.arg("C:\\path\\to\\file.txt") // 可选:指定要打开的文件
.spawn()?; // 使用 spawn 异步执行
// 或者使用 status() 等待程序结束
// let exit_status = Command::new("notepad.exe").status()?;
// println!("Exit status: {:?}", exit_status);
Ok(())
}
2. 跨平台示例(Windows/macOS/Linux)
use std::process::Command;
fn main() -> std::io::Result<()> {
#[cfg(windows)]
{
// Windows
Command::new("notepad.exe").spawn()?;
}
#[cfg(target_os = "macos")]
{
// macOS
Command::new("open").arg("-a").arg("TextEdit").spawn()?;
}
#[cfg(unix)]
{
// Linux (使用 xdg-open 或指定编辑器)
Command::new("xdg-open").arg("/path/to/file.txt").spawn()?;
// 或者指定编辑器如 gedit/nano
// Command::new("gedit").arg("file.txt").spawn()?;
}
Ok(())
}
3. 关键方法说明
Command::new(program)
- 指定要执行的程序.arg(argument)
- 添加参数(可多次调用).spawn()
- 异步执行,返回Result<Child>
.status()
- 同步执行并等待完成,返回ExitStatus
.output()
- 同步执行并捕获输出(适用于命令行程序)
4. 错误处理
建议使用 ?
运算符或 match
处理错误:
match Command::new("notepad").spawn() {
Ok(_) => println!("成功启动记事本"),
Err(e) => eprintln!("启动失败: {}", e),
}
5. 传递参数示例
Command::new("cmd.exe")
.args(&["/C", "echo Hello && pause"])
.spawn()?;
注意事项
- Windows 程序通常不需要路径(如
notepad.exe
在系统 PATH 中) - Linux/macOS 可能需要完整路径(如
/usr/bin/gedit
) - 异步执行时,父进程退出会导致子进程终止
- 敏感操作建议检查退出状态码
如果需要更复杂的进程控制(如管道通信),可以查看 std::process::Stdio
和 Child
结构体的文档。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)