У меня есть сценарий Python, который использует подпроцесс для запуска AppleScript, который изменяет фон моего рабочего стола. Сценарий bash периодически вызывается командой launchd для запуска сценария Python.
Когда я запускаю сценарий bash из командной строки, он работает нормально, но проблема в том, что, когда launchd вызывает сценарий bash точно так же, как AppleScript, похоже, не работает (до этого момента я его отлаживал, и все до вызова подпроцесса работает нормально). Я предполагаю, что это проблема с разрешениями, но похоже, что launchd запускает скрипт от имени меня. Я даже пробовал запустить его как root, но он все равно не работает. Запуск его как демона и администратора пользователя (/ Library / LaunchAgents) также не работает.
Вот мой файл plist:
<?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>
Любая помощь приветствуется!
РЕДАКТИРОВАТЬ: Спасибо за ответ! Вот скрипт на 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
? - person larsks   schedule 14.04.2014