可以用Python创建Mac OS X服务吗?怎么做?

17 投票
4 回答
8373 浏览
提问于 2025-04-16 14:58

你能用Python创建一个Mac OS X的服务吗?怎么做?

我想知道怎么把我的Python代码连接到Mac OS X提供的服务系统上。有没有人知道怎么做?如果知道的话,有没有可以用的代码示例?这个服务是只处理文本,还是也可以处理特定类型的对象?

服务弹出窗口

4 个回答

2

怎么实现这个功能呢?我觉得有三种方法:

  1. 你可以使用Automator,创建一个运行Shell脚本的服务。
  2. 你可以自己用Xcode写一个Automator动作,然后在Automator中使用它,创建一个新的服务。这样做的好处是你可以为它设计一个用户界面。你可以用绑定把它和文件的拥有者对象连接起来。绑定的键会在脚本中作为环境变量出现。
  3. 创建一个独立的服务,或者和某个应用程序一起的服务。我实现过一个包含在应用程序中的服务。在那里你也可以为这个服务定义一个单独的用户界面。

输入类型 - 如果你想让这个服务只在选择了特定内容时出现,比如文本或网址,你需要在这个服务的Info.plist文件中定义这一点。如果你想进一步自定义,应该可以编辑Automator生成的Info.plist文件。


苹果的服务实现指南中有一个很好的例子,讲的是如何用TextEdit调试一个服务。它提供了很好的帮助,能让你了解为什么一个服务没有出现在菜单中。可以查看文档中的提供服务 | 测试部分。

4

用Python创建一个OS X服务的一个方法是把你的Python应用打包成py2app,然后编辑Info.plist文件,以便在服务菜单中提供你需要的菜单项。你可以在这个链接找到一个示例plist文件:https://pyobjc.readthedocs.io/en/latest/examples/Cocoa/AppKit/SimpleService/index.html

你需要实现一些功能,以接受你在Info.plist的NSMessage部分定义的命令(具体可以参考上面的链接)。你可以使用PyObjC来完成这个工作。

这比使用Automator要稍微复杂一点,但好处是你可以把所有功能打包成一个完整的应用。

12
  • 打开 Automator.app,创建一个新的服务。

  • 在左边的动作列表中选择“实用工具”,然后把“运行 Shell 脚本”这个动作拖到工作流程中。

  • 选择 /usr/bin/python 作为你的 Shell。

  • 输入一些 Python 代码。例如:

:

import sys

for f in sys.stdin:
     print "Hello World: " + f,
  • 把这个服务保存为“测试”。

  • 在 TextEdit.app 中试一下。输入一些文字,选中这些文字,然后从菜单中选择 TextEdit -> 服务 -> 测试。这样每一行文字前面应该会加上“Hello World: ”(这就是 Python 代码 for f in sys.stdin 的效果)。

上面的例子是处理文本的。可以推测,这个方法也可以修改来处理其他类型的数据,只要通过 OS X 的服务系统提供即可。

撰写回答