python - 从 python 脚本打开 mac 中的任何应用程序,如 vlc、chrome、终端

标签 python python-3.x macos automation

我正在编写一个脚本,如果我说“打开 vlc”,那么它应该打开 vlc 应用程序,如果我说“打开 chrome”,那么它应该打开 google chrome。为此,我尝试了以下方法,但我遇到了权限被拒绝问题,而且我所做的方式是手动处理每个应用程序。有没有其他方法可以打开任何 Mac 应用程序?

if 'open vlc' in query:
    subprocess.call(['/Applications/VLC.app'])
if 'open chrome' in query:
    subprocess.call(['/Applications/Google Chrome.app'])

# open system preferences, notes as well

最佳答案

OS X 使用的 Bash 终端实际上​​具有 open 命令,该命令应该与子进程一起使用:

subprocess.call(["open", "-a", "ApplicationName"])

根据我的经验,这使用 /Applications/ 作为应用程序的默认位置。另请参阅the man page for the open command .

就您而言,我建议您制作一个字典或在您的程序中输入有效的应用程序名称,这样可以输出程序的实际可执行名称:

valid_programs = {
    "vlc": "VLC"
    "chrome": "Google Chrome"
}

要制作通用的“打开”语句,您可以使用正则表达式来识别命令的形式并捕获它们尝试打开的名称,然后与 valid_programs 交叉引用:

import re
...
app_name_query = re.match(r"open (.*)\b", query):
if app_name_query:
    try: 
        subprocess.call(["open", "-a", valid_programs[app_name_query.group(1)]])
    except KeyError:
        print(f"I didn't recognize the program {app_name_query.group(1)}!")

(您可能需要稍微更改正则表达式调用以匹配您的查询使用的任何格式 - see the documentation 有关如何执行此操作的详细信息)

关于python - 从 python 脚本打开 mac 中的任何应用程序,如 vlc、chrome、终端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57077871/

相关文章:

python - 如何避免 Python 3 中函数调用中的重复参数

python - Pandas 使用 For 循环分配值时出现 KeyError

macos - Matlab 绘图 - 字体 Zapf Dingbats 不会呈现

apache - 在 Mac OSX 上安装 mod_mono

python - 我如何在 Eclipse 中调试 openerp 代码

python - 我无法使用 python 的 "replace"使我的 0 成为缺失值(0->np.nan)

python - Django 模板中的下标字符串

python-3.x - 如何使用Python3解决Elasticsearch中的BUG INTEGER映射问题?

objective-c - 如何判断触控板点击的NSEvent,而不是点击点击

Python "shutdown/reboot raspberry pi"脚本,使用单个按钮