2011-04-06 71 views
4

我編寫了一個使用appscript的python腳本來跟蹤我當前活動的窗口。我通過launchd運行它,但是當我這樣做時,它無法導入appscript。我已經在plist中設置了PYTHONPATH用於啓動,但我認爲launchd不會讀取站點包中的.pth文件。有沒有辦法讓它做到這一點?launchd執行python腳本,但導入失敗

我的腳本是在這裏:https://github.com/katylava/macwintracker

這是的launchd 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腳本工作正常,在命令行。

回答

6

很可能是系統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首先找到MacPython python。當通過launchd運行時,不涉及shell,因此不會發生操作;只搜索默認路徑,意味着/usr/bin/env python執行/usr/bin/python

+0

謝謝!我完全看錯了方向。我修復了它,所以我的安裝腳本用'which python'的輸出替換了shebang路徑。爲了完整起見,我將EnvironmentVariable留在那裏,併爲PATH添加一個鍵。 – 2011-04-07 18:25:55