如何在 macOS 上按名称以编程方式打开应用程序?

hed*_*gie 6 python macos

我正在编写一个跨平台的 Python 应用程序,它充当DOSBox的前端。它需要使用许多命令行参数调用 DOSBox 可执行文件。我不想硬编码到 DOSBox 的特定路径,因为它可能取决于用户安装它的位置。

在 Linux 上,我可以简单地做:

import subprocess
subprocess.run(['dosbox'] + args)
Run Code Online (Sandbox Code Playgroud)

但是,在 macOS 上,我目前使用以下代码:

import subprocess
subprocess.run(['/Applications/dosbox.app/Contents/MacOS/DOSBox'] + args)
Run Code Online (Sandbox Code Playgroud)

这看起来非常具体,我什至不确定它是否有效,因为我没有要测试的 Mac。

在 macOS 上按名称打开应用程序的正确方法是什么?

(注意:我也为 Windows提出了这个兄弟问题。)

Mar*_*ell 5

我不知道DOSBox或想要它在我的 Mac 上,但一般来说,当你在 macOS 上安装一个应用程序时,它有一个“属性列表”文件,plist或者"info.plist"在其中。在那里,开发商应该把“捆绑标识符”键调CFBundleIdentifier。这在所有应用程序中必须是唯一的,因此对于DOSBox,它应该是这样的:

<key>CFBundleIdentifier</key>
<string>com.dosboxinc.dosbox</string>
Run Code Online (Sandbox Code Playgroud)

让您的一位用户找到它,然后您可以使用捆绑标识符像这样打开它,无论安装位置如何:

open -b BUNDLEIDENTIFIER --args arg1 arg2 arg3
Run Code Online (Sandbox Code Playgroud)

where arg1arg2arg3传递给DOSBox


可以通过在终端中运行它来获取包标识符:

osascript -e 'id of app "DOSBox"'
Run Code Online (Sandbox Code Playgroud)

但是请注意,如果此命令有效,则意味着我已经正确猜出了 app name "DOSBox",这意味着您可以使用 app name with open,而不是像这样的包标识符:

open -a DOSBox --args arg1 arg2 arg3
Run Code Online (Sandbox Code Playgroud)