在 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