Нужна помощь в запуске скрипта Python на Mac с помощью Launch Agent и отправке выходных данных в окно

#python #launchd #startupscript

#python #launchd #startupscript

Вопрос:

Я создал скрипт Python, который хотел бы запускать автоматически при входе на Mac, и для этого мне нужна помощь с использованием Launch Agent. Я ТАК часто заставлял вещи работать до этого момента, поэтому я решил, что это то место, где нужно спросить, но я все еще довольно новичок в этом, поэтому мне нужна помощь.

Вот что у меня есть на данный момент и что мне все еще нужно:

У меня есть скрипт на Python, который я могу запустить с терминала. Он периодически выводит текст в окно терминала всякий раз, когда выполняет что-то важное (использует команду python ‘print’). Он также создает журнал этого в другом месте, но я также хочу, чтобы обновление в реальном времени в окне, которое остается открытым.

Что мне сейчас нужно, так это агент запуска, чтобы автоматически запускать этот скрипт при входе в систему и по-прежнему выводить этот текст. Я запустил базовый Launch Agent, но он запускает скрипт в фоновом режиме, и я больше не вижу выходных данных. Основываясь на моих исследованиях до сих пор, похоже, что я могу использовать ключевое слово «StandardOutPath» в Lauch Agent .plist для перенаправления этого вывода? Я пока недостаточно хорошо разбираюсь в stdout / stdin / stderr в этих программах, чтобы понять, как все это работает, но я надеялся существенно перенаправить этот вывод, возможно, в окно xterm или подобное.

Я нигде не смог найти хорошего примера такого рода вещей, так что, возможно, есть лучший способ сделать это, и я просто не ищу правильную вещь. Любая помощь или объяснение того, как все это работает, были бы высоко оценены.

Обновлено: Мой рабочий Launch Agent .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>Label</key>
    <string>com.name.WVCS-0.1</string>
    <key>RunAtLoad</key>
    <true/>
    <key>ProgramArguments</key>
    <array>
        <string>osascript</string>
        <string>/Path/to/StartupScript</string>
    </array>
</dict>
</plist>
  

Ответ №1:

Если вы хотите, чтобы выходные данные отображались в терминале, вы можете использовать Launch Agent для запуска Apple Script, который откроет терминал, а затем запустит ваш python Script:

 tell application "Terminal"
    activate
    do script "/usr/bin/python WVCS-0.1.py"
end tell
  

или для отображения текста в окне applescript / вызова

 tell application "Terminal"
    activate
    do shell script "/usr/bin/python WVCS-0.1.py"
end tell
  

А затем измените свой plist так, чтобы

 <array>
    <string>osascript</string>
    <string>/path/to/that/script</string>
</array>
  

Не очень элегантно, но я надеюсь, что это поможет!

Комментарии:

1. Что ж, это сработало для его запуска, но, к сожалению, он по-прежнему не выводится в окно. Если я просто запускаю applescript, выходные данные отображаются в окне редактора Applescript в разделе вывод. Похоже, этот скрипт получает выходные данные из команды оболочки, а не запускает команду в только что открытом окне терминала.

2. Извините — моя ошибка — в этом случае вы хотите do script "/usr/bin/python /path/to/WVCS-0.1.py"