2011-04-06 4 views
4

appscript를 사용하여 현재 활성 창을 추적하는 python 스크립트를 작성했습니다. launchd를 통해 실행하고 있지만, 그렇게하면 appscript를 가져올 수 없습니다. launchd에 대한 plist에 PYTHONPATH를 설정했지만 launchd는 site-packages에서 .pth 파일을 읽지 않습니다. 거기에 그렇게 할 수있는 방법이 있습니까?launchd가 python 스크립트를 실행하지만 가져 오기가 실패합니다.

내 스크립트는 여기에 있습니다 :

<?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 

파이썬 스크립트 명령 줄에서 잘 작동 https://github.com/katylava/macwintracker

이는 launchd에의 PLIST입니다.

답변

6

기회는 시스템 파이썬 (/usr/bin/python)를 사용하면 appscript을 설치 한 MacPorts를 파이썬 (/opt/local/bin/python2.6)보다는 스크립트를 실행하기 시작되고 있음이다. 무엇이 작동해야합니까 (테스트되지 않았습니다!) 스크립트의 경로 앞에 MacPorts Python 경로를 첫 번째 Program Argument으로 삽입하십시오. 이 경우 PYTHONPATH을 지정할 필요가 없습니다. 이론 상으로는 MacPorts Python이 시스템 Python과 호환되도록 (예 : 비슷한 아치, 배치 타겟 등) 구성되어있는 한 작업을 할 수는 있지만 그 경로를 원할 필요는 없습니다 .

또 다른 방법은 MacPorts를 파이썬에 EXPLICT 경로에 스크립트의 오두막 라인 (첫 번째 줄)를 변경하는 것입니다 :

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

이 명령 행 쉘에서 작동하는 이유는 가능성을 그 셸 프로파일 파일의 .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에 키를 추가한다. –

관련 문제