2014-04-13 5 views
3

subprocess를 사용하여 바탕 화면 배경을 변경하는 AppleScript를 실행하는 Python 스크립트가 있습니다. bash 스크립트는 launchd에 의해 주기적으로 호출되어 Python 스크립트를 실행합니다.launchd 실행시 Python 하위 프로세스가 작동하지 않습니다.

내가 명령 줄에서 bash 스크립트를 실행하면 제대로 작동하지만 문제는 launchd가 AppleScript가 작동하지 않는 것처럼 정확한 방법으로 bash 스크립트를 호출 할 때까지 발생합니다. 이 시점, 그리고 서브 프로세스 호출 이전의 모든 것이 잘 동작한다). 내 추측은 사용 권한 문제이지만 launchd는 스크립트를 실행하고있는 것으로 보입니다. 심지어 루트로 실행하는 데 노력했는데 여전히 작동하지 않습니다. 데몬 및 사용자 관리 (/ 라이브러리/LaunchAgents)로 실행하면 작동하지 않습니다. 모든 모든 도움은 감사

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
<dict> 
     <key>Disabled</key> 
     <false/> 
     <key>Label</key> 
     <string>com.foo.background.change</string> 
     <key>Nice</key> 
     <integer>-15</integer> 
     <key>ProgramArguments</key> 
     <array> 
       <string>/bin/bash</string> 
       <string>-c</string> 
       <string>/Users/scott/Projects/Background/env/bin/Background/change_background.sh</string> 
     </array> 
     <key>ServiceDescription</key> 
     <string>Runs a script to change the desktop background image.</string> 
     <key>ServiceIPC</key> 
     <false/> 
     <key>StartInterval</key> 
     <integer>60</integer> 
     <key>UserName</key> 
     <string>scott</string> 
</dict> 
</plist> 

:

여기 내 PLIST 파일입니다!

편집 : 응답 해 주셔서 감사합니다. 다음은 python 스크립트입니다. set_desktop_background은 사용할 이미지를 결정하는 다른 메서드에서 호출됩니다. 전체 이미지 경로가 항상 사용됩니다.

import subprocess 

SCRIPT = """/usr/bin/osascript<<END 
tell application "Finder" 
set desktop picture to POSIX file "%s" 
end tell 
END""" 

def set_desktop_background(filepath): 
    subprocess.Popen(SCRIPT%filepath, shell=True) 
+0

파이썬 스크립트를 보여줄 수 있습니까? 아니면 적어도'subprocess' 모듈을 사용하는 부분일까요? – larsks

+1

PATH 문제와 유사합니다. subprocess 명령에서 실행 파일의 전체 경로를 지정하고 있습니까? –

+0

예, 제 편집을 참조하십시오. 감사! – srobinson

답변

1

마지막으로 알아 냈습니다. 어딘가에이 스크립트를 작성하는 동안 OSX의 시스템 환경 설정에서 '그림 변경 : 매일 (Every Day)'기능을 활성화했습니다 (이 프로세스에 사용 된 plist를 찾을 수 있는지 알고 싶었습니다). 마침내 이것을 깨닫고 사용을 중지하면 launchd는 내 스크립트를 통해 백그라운드를 변경할 수있었습니다.

수동으로 스크립트를 실행했지만 배경을 변경할 수 있었던 이유는 아직도 확실하지 않습니다.하지만 오.

도움 주셔서 감사합니다.

관련 문제