在Automator服务中使用Python的第三方模块

2 投票
2 回答
2593 浏览
提问于 2025-04-15 18:12

我在我的电脑上安装了Py-Appscript,并且可以用它来运行位于/Library/Frameworks/Python.framework/Versions/Current/bin/python的Python。

现在我想在Automator服务中使用这个Py-Appscript的安装。为此,我使用了运行Shell脚本这个动作,然后把Shell设置为usr/bin/python(可惜这是我唯一的Python选择)。

但是,usr/bin/python似乎无法访问我的第三方模块,运行到这一行时就崩溃了:

from appscript import *

有没有办法让我给usr/bin/python访问我的第三方模块的权限?或者,有没有办法告诉Automator使用/Library/Frameworks/Python.framework/Versions/Current/bin/python呢?

我需要Automator直接从运行Shell脚本这个动作中运行Python。任何通过bin/bash等方式调用外部Python脚本的动作,执行速度都太慢,没法用。

2 个回答

0

当你安装模块时,通常是针对每个Python实例来安装的。所以在这个情况下,你是为位于 /Library/Frameworks/Python.framework/Versions/Current/bin/python 的Python安装了这些模块,这样它们就只能在这个Python中使用。而 /usr/bin/python 显然是另一个Python的安装(我对OS X不是很懂)。

如果你想让这些模块在 /usr/bin/python 中也能用,就需要为 /usr/bin/python 安装一遍。

3

好的,我找到了一种方法可以让它工作,使用的是在这个链接上找到的技巧。

运行Shell脚本的操作里,我用了/bin/sh/这个命令行工具,并且使用了<<EOF ... EOF来指向正确的Python安装位置。

举个例子,输入

/Library/Frameworks/Python.framework/Versions/Current/bin/python <<EOF
from appscript import *
Numbers = app('Numbers')
EOF

运行Shell脚本操作的代码部分就可以了。这样就能调用正确的安装路径(上面提到的/Library/Frameworks/Python.framework/Versions/Current/bin/python),并把你的程序放在<<EOF ... EOF之间。

Alfred

这个技巧在Alfred中也能用。如果你想在Alfred中使用appscript,只需要确保把{query}传递给上面提到的Python版本,像这样:

/Library/Frameworks/Python.framework/Versions/Current/bin/python script.py {query}

撰写回答