#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"