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)
파이썬 스크립트를 보여줄 수 있습니까? 아니면 적어도'subprocess' 모듈을 사용하는 부분일까요? – larsks
PATH 문제와 유사합니다. subprocess 명령에서 실행 파일의 전체 경로를 지정하고 있습니까? –
예, 제 편집을 참조하십시오. 감사! – srobinson