2011-04-06 17 views
4

私は現在アクティブなウィンドウを追跡するためにappscriptを使用してpythonスクリプトを作成しました。私はlaunchd経由で実行していますが、私がそうするとappscriptをインポートできません。 launchdのplistにPYTHONPATHを設定しましたが、launchdはsite-packagesの.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

appscriptがインストールされているMacPorts Python(/opt/local/bin/python2.6)ではなく、システムのPython(/usr/bin/python)が起動されている可能性があります。何がうまくいくのですか(テストされていません!)は、MacPorts Pythonパスを最初のProgram Argumentとしてスクリプトのパスの前に挿入することです。その場合、PYTHONPATHを指定する必要はありません。理論的には、MacPorts PythonがシステムPythonと互換性があるように構成されている限り(つまり、類似のアーチ、デプロイメントターゲットなど)、あなたが作業しているものを作ることができるかもしれませんが、 。

別のアプローチは、MacPortsのPythonのに明示的なパスにスクリプトのシェバング行(先頭行)を変更することである:これは、コマンドラインシェルで動作

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

理由は、おそらく1つですあなたのシェルプロファイルファイルのうち、.bash_profileは、最初にMacPorts Python(/opt/local/bin)へのパスを含むようにPATH環境変数を変更し、/usr/bin/env pythonがMacPython pythonを最初に見つけます。 launchdを実行すると、シェルは関与せず、PATHの操作は行われません。デフォルトのパスだけが検索されます。つまり、/usr/bin/env python/usr/bin/pythonを実行します。

+0

ありがとうございます!私は完全に間違った方向を見ていた。私はそれを修正して、私のセットアップスクリプトがshebangパスを 'which python'の出力に置き換えました。私はEnvironmentVariableを完全に残しておき、PATHのキーも追加します。 –

関連する問題