我使用 appscript 编写了一个 python 脚本来跟踪我当前活动的窗口。我通过 launchd 运行它,但是当我这样做时,它无法导入 appscript。我已经在 launchd 的 plist 中设置了 PYTHONPATH,但我认为 launchd 没有读取站点包中的 .pth 文件。有没有办法让它做到这一点?
我的脚本在这里:https://github.com/katylava/macwintracker https://github.com/katylava/macwintracker
这是启动的 plist:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>label</key>
<string>com.katylavallee.wintracker</string>
<key>ProgramArguments</key>
<array>
<string>/Users/kyl/Library/Application Support/com.katylavallee.wintracker/wintracker.py</string>
<string>1</string>
<string>1</string>
</array>
<key>Environment Variables</key>
<dict>
<key>PYTHONPATH</key>
<string>/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages</string>
</dict>
<key>StandardErrorPath</key>
<string>/Users/kyl/Library/Logs/com.katylavallee.wintracker/wintracker_err.log</string>
<key>StandardOutPath</key>
<string>/Users/kyl/Library/Logs/com.katylavallee.wintracker/wintracker.log</string>
<key>StartInterval</key>
<integer>3</integer>
</dict>
</plist>
和错误:
Traceback (most recent call last):
File "/Users/kyl/Library/Application Support/com.katylavallee.wintracker/wintracker.py", line 5, in <module>
from appscript import app, its
ImportError: No module named appscript
python 脚本在命令行下运行良好。
很可能系统 Python (/usr/bin/python
)正在启动来执行您的脚本,而不是 MacPorts Python(/opt/local/bin/python2.6
)你有的地方appscript
安装。应该有效的(未经测试!)是将 MacPorts Python 路径作为第一个插入Program Argument
,位于脚本路径之前。在这种情况下,您不需要指定PYTHONPATH
。理论上,只要 MacPorts Python 配置与系统 Python 兼容(即类似的架构、部署目标等),您就可以使您所拥有的功能正常工作,但您可能不希望或不需要走这条路。
另一种方法是将脚本的 shebang 行(第一行)更改为 MacPorts Python 的显式路径:
#!/opt/local/bin/python2.6
这在命令行 shell 中起作用的原因可能是您的 shell 配置文件之一,例如.bash_profile
,修改PATH
环境变量以包含 MacPorts Python 的路径(/opt/local/bin
)首先这样/usr/bin/env python
找到 MacPythonpython
第一的。当跑过时launchd
,外壳不参与,因此PATH
操纵行为不会发生;仅搜索默认路径,这意味着/usr/bin/env python
执行/usr/bin/python
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)