5

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

そしてエラー:

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スクリプトは、コマンドラインから正常に機能します。

4

2 に答える 2

8

スクリプトを実行するために、インストールした MacPorts Python ( )/usr/bin/pythonではなく、システム Python ( ) が起動されている可能性があります。動作するはずの (テストされていません!)スクリプトへのパスの前に、最初の として MacPorts Python パスを挿入することです。その場合、指定する必要はありません。理論的には、MacPorts Python がシステム Python と互換性を持って構成されている (つまり、同様のアーキテクチャ、展開ターゲットなど) 限り、あなたが持っているものを機能させることができるかもしれませんが、おそらくその道をたどる必要はないでしょう。 ./opt/local/bin/python2.6appscriptProgram ArgumentPYTHONPATH

もう 1 つの方法は、スクリプトのシェバン行 (最初の行) を MacPorts Python への明示的なパスに変更することです。

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

これがコマンド ライン シェルで機能する理由は、たとえば、シェル プロファイル ファイルの 1 つが環境変数を.bash_profile変更して、最初に MacPorts Python ( ) へのパスを含め、最初に MacPythonを検出するためです。を実行すると、シェルは関与しないため、操作は行われません。デフォルトのパスだけが検索されます。つまり、実行されます。PATH/opt/local/bin/usr/bin/env pythonpythonlaunchdPATH/usr/bin/env python/usr/bin/python

于 2011-04-06T22:37:43.070 に答える