Подпроцесс Python не работает при запуске с помощью launchd

У меня есть сценарий 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)

person srobinson    schedule 13.04.2014    source источник
comment
Вы можете показать нам скрипт Python? Или хотя бы его часть, использующая модуль subprocess?   -  person larsks    schedule 14.04.2014
comment
Похоже на проблему с PATH. Вы указываете полный путь к исполняемому файлу в команде подпроцесса?   -  person Nathan Grigg    schedule 14.04.2014
comment
Да, пожалуйста, посмотрите мою правку. Спасибо!   -  person srobinson    schedule 14.04.2014


Ответы (1)


Наконец разобрался. Где-то в процессе, когда я писал этот скрипт, я включил функцию «Изменить изображение: каждый день» в системных настройках OSX (я хотел посмотреть, смогу ли я найти список, используемый для этого процесса). Как только я наконец понял это и отключил его, launchd смог изменить фон с помощью моего скрипта.

Я до сих пор не уверен, почему это произошло, поскольку я смог изменить фон, когда вручную запустил скрипт, ну да ладно.

Спасибо за помощь!

person srobinson    schedule 15.04.2014