launchd执行python脚本,但导入失败

2024-10-01 15:38:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我用appscript编写了一个python脚本来跟踪当前活动窗口。我正在通过launchd运行它,但当我这样做时,它无法导入appscript。我在plist中为launchd设置了PYTHONPATH,但是我认为launchd没有读取站点包中的.pth文件。有没有办法做到这一点?在

我的脚本在这里: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>

错误是:

^{pr2}$

python脚本从命令行运行良好。在


Tags: key脚本comstringversionlibraryusersdict
2条回答

您还可以在programmarguments中使用python的完整路径。(此处提供更多详细信息:Running Python Script with Launchd: imports not found

   <key>ProgramArguments</key>
    <string>/path/to/your/python</string>
    <string>/path/to/your/script</string>

很可能是启动了系统Python(/usr/bin/python)来执行脚本,而不是安装了appscript的MacPorts Python(/opt/local/bin/python2.6)。什么应该有效(未经测试!)将MacPorts Python路径作为第一个Program Argument插入到脚本的路径之前。在这种情况下,您不需要指定PYTHONPATH。理论上,只要MacPorts Python与系统Python兼容配置(例如,类似的arch、部署目标等),您就可以让您所拥有的功能正常工作,但您可能不希望或不需要沿着这条路走下去。在

另一种方法是将脚本的shebang行(第一行)改为MacPorts Python的显式路径:

#!/opt/local/bin/python2.6

这在命令行shell中起作用的原因很可能是您的shell配置文件之一,比如.bash_profile,首先修改PATH环境变量,以包含MacPorts Python(/opt/local/bin)的路径,以便/usr/bin/env python首先找到MacPython python。当运行launchd时,不涉及shell,因此{}操作不会发生;只搜索默认路径,这意味着/usr/bin/env python执行/usr/bin/python。在

相关问题 更多 >

    热门问题