Подпроцесът на 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 (исках да видя дали мога да намеря plist, използван за този процес). След като най-накрая осъзнах това и го деактивирах, launchd успя да промени фона чрез моя скрипт.

Все още не съм сигурен защо това се случи, след като успях да променя фона, когато ръчно стартирах скрипта, но добре.

Благодаря за помощта!

person srobinson    schedule 15.04.2014