在 macOS 中通过命令行与 Siri 交互

Posted

技术标签:

【中文标题】在 macOS 中通过命令行与 Siri 交互【英文标题】:Interacting with Siri via the command line in macOS 【发布时间】:2016-09-28 23:41:13 【问题描述】:

我在手机和手表上使用 Siri 来随时随地创建提醒。当我在办公室时,我不想通过使用 Siri 来打扰安静,所以我通常使用与 Reminder 应用程序集成的 Alfred 工作流程,或者直接使用 Reminders 应用程序。

但是,两者都有一个相当笨拙的界面,如果我可以在命令行中输入会容易得多:

$ siri "remind me to check stack overflow for responses to my question in 15 minutes"

macOS Sierra 已将 Siri 引入桌面,但到目前为止,除了真正大声说话之外,我一直无法找到与 Siri 交互的任何方式,并且 Spotlight 与 Siri 不匹配具有自然语言理解能力。

Apple 已经宣布了 Siri SDK,但它似乎主要是为了向 Siri 添加功能,而不是为了公开 Siri API。

Apple 是否向 macOS 上的 Siri 公开任何类型的 API,以便人们可以通过命令行、系统调用或其他可执行文件发出 Siri 请求?

注意:我知道这个问题可以在 Ask Different、Super User 或 Unix & Linux 上找到更好的答案。最后,我认为与 API 或 SDK 进行一些编程集成是最可能的解决方案,因此 Stack Overflow 似乎是最合适的发布位置。如果模组不同意,请迁移到最好的社区。​​sub>

【问题讨论】:

刚刚安装了 Sierra 更新,和你有同样的想法。不想在办公室与 Siri 交谈。宁愿只在 bash 中键入命令。这应该是一个很自然的功能,因为 Siri 在听到命令后的第一项工作很可能涉及将该命令解析为文本。 【参考方案1】:

这不是来自命令行,而是更接近...我还没有测试过,但在 High Sierra 中,有一种方法可以使用辅助功能设置,让您可以使用键盘向 Siri 提问。

如何开启:

系统偏好设置 > 辅助功能 > Siri。 单击Enable Type to Siri 旁边的框以显示一个勾号。 现在,当您触发 Siri 时,会出现一个键盘,您可以在其中输入查询。

从这里抓取:https://www.macworld.co.uk/news/mac-software/how-use-siri-on-mac-3536158/

【讨论】:

【参考方案2】:

我今天想要同样的功能 - 我得到了它,但可以改进:https://youtu.be/VRLGCRrReog

TLDR 是使用 Rogue Amoeba 的 LoopBack 并将 Siri 的输入麦克风更改为 Loopback。然后以终端中的 Say 命令为例。

【讨论】:

不错的 hack,但我希望有更直接的方法 :) 很好的解决方案!【参考方案3】:

正如 Brad Parks 所说,您可以从“辅助功能”菜单中启用“键入 Siri”。您可以使用它通过模拟按键与 Siri 进行交互。

我创建了一个简单的 Python 脚本,当从命令行调用时,它的行为类似于您的问题中所请求的。

脚本使用keyboard Python 模块。

#!/usr/bin/python
import sys
import time
import keyboard

def trigger_siri():
    keyboard.press('command+space')
    time.sleep(0.3)
    keyboard.release('command+space')
    time.sleep(0.2)  # Wait for Siri to load

if __name__=='__main__':
    trigger_siri()
    keyboard.write(sys.argv[1])
    keyboard.send('enter')

【讨论】:

那个键盘库好像下载了整个pypi注册表....【参考方案4】:

Cliclick 是一个很棒的(免费的)工具,用于通过命令行触发鼠标和键盘事件。安装 Cliclick 后,我启用了“Type to Siri”(系统偏好设置 > 辅助功能 > Siri)。我还将 Siri 的键盘快捷键更改为“Press Fn (Function) Space”(系统偏好设置 > Siri)。其他键盘快捷键选项要求您“按住”一个键,这可以做到,但它使事情变得有点棘手。

完成所有这些后,我可以从终端调用 Siri,如下所示:

$ cliclick kd:fn kp:space ku:fn w:250 t:"turn on the living room lights" kp:return

更进一步,如果你熟悉terminal aliases and functions,你可以创建一个“siricli”函数:

siricli()
    cliclick kd:fn kp:space ku:fn w:250 t:"$1" kp:return

添加该功能后打开一个新的终端窗口,现在您可以从命令行调用 Siri,如下所示:

siricli "turn on the living room lights"

【讨论】:

这是我最喜欢的解决方案。谢谢!

以上是关于在 macOS 中通过命令行与 Siri 交互的主要内容,如果未能解决你的问题,请参考以下文章

Spark-Unit2-Spark交互式命令行与SparkWordCount

在 Linux 中通过 PHP 使用 SoX

shell 常用命令

消息中间件——RabbitMQ(四)命令行与管控台的基本操作!

Python Argparse Moudle

day23 GUI