在Automator服务中使用Python的第三方模块
我在我的电脑上安装了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 个回答
当你安装模块时,通常是针对每个Python实例来安装的。所以在这个情况下,你是为位于 /Library/Frameworks/Python.framework/Versions/Current/bin/python 的Python安装了这些模块,这样它们就只能在这个Python中使用。而 /usr/bin/python 显然是另一个Python的安装(我对OS X不是很懂)。
如果你想让这些模块在 /usr/bin/python 中也能用,就需要为 /usr/bin/python 安装一遍。
好的,我找到了一种方法可以让它工作,使用的是在这个链接上找到的技巧。
在运行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}