如何使用 Rust 使用默认程序启动任何文件(如 Python 的 `os.startfile()`)

Posted

技术标签:

【中文标题】如何使用 Rust 使用默认程序启动任何文件(如 Python 的 `os.startfile()`)【英文标题】:How launch any file using default program using Rust (like Python's `os.startfile()`) 【发布时间】:2021-08-08 10:51:04 【问题描述】:

python中是否有等效于os.startfile()的rust方法。例如,我需要使用 rust 启动一个“mp3 文件”。在 python 中是os.startfile('audio.mp3')。这将打开默认媒体播放器并开始播放该文件。我需要对 Rust 语言做同样的事情。

【问题讨论】:

【参考方案1】:

Python 的 os.startfile() 函数仅在 Windows 上可用,它只是 Windows API 中 ShellExecuteW() 的包装。你可以call this function via the winapi crate。

使用open crate 是一种更简单、更便携的解决方案。

【讨论】:

@SantoK.Thomas open crate 看起来像是通过xdg-open 和其他人明确支持 Windows、MacOS、ios 和其他 Unix 系统。【参考方案2】:

到目前为止,有两种方法可以在多个操作系统平台(Mac、Windows 和 Linux)上运行。我也亲自测试过。方法一: 使用opener crate (link) 在 Windows 上使用ShellExecuteW Windows API 函数。在 Mac 上使用系统 open 命令。在其他平台上,使用xdg-open 脚本。系统xdg-open未使用;而是在此库中嵌入了一个版本。在rs file(src/main.rs) 中使用以下代码:

// open a file
let result = opener::open(std::path::Path::new("Cargo.toml"));
println!(":?", result); // for viewing errors if any captured in the variable result

在依赖项部分的“Cargo.toml”文件中使用以下代码:

opener = "0.4.1"

方法二: 使用open crate (link) 使用此库可使用系统上配置的程序打开路径或 URL。它相当于运行以下之一:open <path-or-url>(OSX)、start <path-or-url> (Windows)、xdg-open <path-or-url> || gio open <path-or-url> || gnome-open <path-or-url> || kde-open <path-or-url> || wslview <path-or-url> (Linux)。 在rs file(src/main.rs) 中使用以下代码:

// to open the file using the default application
open::that("Cargo.toml");
// if you want to open the file with a specific program you should use the following
open::with("Cargo.toml", "notepad");

在依赖项部分的“Cargo.toml”文件中使用以下代码:

open = "1.7.0"

希望对所有人都有效。

【讨论】:

以上是关于如何使用 Rust 使用默认程序启动任何文件(如 Python 的 `os.startfile()`)的主要内容,如果未能解决你的问题,请参考以下文章

如何定期将shell脚本的结果设置为Kubernetes Cronjob的参数

刚买的腐蚀(rust),载入完成之后就启动错误进不去怎么办?

如何为通用应用程序使用默认启动画面?

Rust 语言如何帮助你防止 bug

如何使用 Rust 和 Amethyst 运行可执行文件

我如何懒惰地从Rust中的文件/流中读取多个JSON值?