В этой статье мы расскажем, как на Python сделать автоматический перезапуск программы. Возможно, вы столкнулись с тем, что ваша программа иногда вылетает или зависает, и вам приходится вручную ее перезапускать. Это может быть очень неудобно, особенно если программа запущена на удаленном сервере или работает в фоновом режиме.
Существует несколько способов реализации автоматического перезапуска программы на Python. Один из самых простых – использовать модуль ‘watchdog’. Он позволяет отслеживать изменения файлов в определенной директории и запускать заданный скрипт при их изменении. Давайте посмотрим, как это работает.
1. Установка модуля ‘watchdog’
Перед тем, как начать использовать ‘watchdog’, нужно установить его на ваш компьютер. Для этого откройте терминал и введите следующую команду:
pip install watchdog
2. Написание скрипта для автоматического перезапуска программы
Теперь мы готовы написать скрипт, который будет автоматически перезапускать нашу программу при изменении ее файлов. Для примера допустим, что мы хотим перезапускать файл ‘main.py’. Создадим новый файл ‘autoreload.py’, который будет следить за изменением файла ‘main.py’ и запускать его каждый раз, когда он изменится.
Автоматический Перезапуск Служб с помощью Zabbix на Windows и Linux
import time from watchdog.observers import Observer from watchdog.events import FileSystemEventHandler import subprocess class Handler(FileSystemEventHandler): def on_any_event(self, event): if event.is_directory: return None elif event.event_type == ‘modified’: print(«File %s was modified, restarting. » % event.src_path) subprocess.Popen([‘python’, ‘main.py’]) else: print(«Unhandled event») if __name__ == «__main__»: observer = Observer() event_handler = Handler() observer.schedule(event_handler, ‘.’, recursive=True) observer.start() try: while True: time.sleep(1) except KeyboardInterrupt: observer.stop() observer.join()
Этот скрипт просматривает текущую директорию и ее поддиректории на наличие изменений в файлах. Если файл ‘main.py’ был изменен, то он запускает его заново при помощи модуля subprocess.
3. Запуск скрипта
Теперь мы готовы запустить наш скрипт на автоматический перезапуск. Чтобы это сделать, запустите следующую команду в терминале:
python autoreload.py
Откройте терминал и перейдите в директорию, в которой находятся файлы ‘main.py’ и ‘autoreload.py’. Запустите скрипт ‘autoreload.py’ и он начнет отслеживать изменения в файлах. Если вы измените файл ‘main.py’, то скрипт автоматически перезапустит его.
4. Дополнительные настройки
Как создать «перезапуск кода» на Python?
Всем доброго, изучаю питон самостоятельно, написал программу которая переводит числа в квадрат, в конце если пользователь пишет «Да» что бы либо он перезагружал либо зациклил этот код.
Чтобы не искать, все в низу.
#Переводчик квадратов чисел
#Приветствие
print(«Добро пожаловать в «Переводчик квадратов чисел»»)
start=input(«Начинаем работать?(Да,Нет): » )
Как сделать автозапуск программ на Python по расписанию
#консоль начала работы
if start==»Да»:
number=int(input(«Введите число,которое нужно перевести: » ))#ввод числа
elif start==»Нет»:
print(«Досвидания =(«)
exit()
else:
restart=bool(print(«Напишите Да/Нет(С заглавной буквы)»))
if restart==False:
exit()
#список квадратов
if number==0:
print(«Результат:0»)
elif number==1:
print(«Результат:1»)
elif number==2:
print(«Результат:4»)
elif number==3:
print(«Результат:9»)
elif number==4:
print(«Результат:16»)
elif number==5:
print(«Результат:25»)
elif number==6:
print(«Результат:36»)
elif number==7:
print(«Результат:49»)
elif number==8:
print(«Результат:64»)
elif number==9:
print(«Результат:81»)
elif number==10:
print(«Результат:100»)
elif number==11:
print(«Результат:121»)
elif number==12:
print(«Результат:144»)
elif number==13:
print(«Результат:169»)
elif number==14:
print(«Результат:196»)
elif number==15:
print(«Результат:225»)
elif number==16:
print(«Результат:256»)
elif number==17:
print(«Результат:289»)
elif number==18:
print(«Результат:324»)
elif number==19:
print(«Результат:361»)
elif number==20:
print(«Результат:400»)
elif number==21:
print(«Результат:441»)
elif number==22:
print(«Результат:484»)
elif number==23:
print(«Результат:529»)
elif number==24:
print(«Результат:576»)
elif number==25:
print(«Результат:625»)
elif number==26:
print(«Результат:676»)
elif number==27:
print(«Результат:729»)
elif number==28:
print(«Результат:784»)
elif number==29:
print(«Результат:841»)
elif number==30:
print(«Результат:900»)
elif number==31:
print(«Результат:961»)
elif number==32:
print(«Результат:1024»)
elif number==33:
print(«Результат:1089»)
elif number==34:
print(«Результат:1156»)
elif number==35:
print(«Результат:1225»)
elif number==36:
print(«Результат:1296»)
elif number==37:
print(«Результат:1369»)
elif number==38:
print(«Результат:1444»)
elif number==39:
print(«Результат:1521»)
elif number==40:
print(«Результат:1600»)
elif number==41:
print(«Результат:1681»)
elif number==42:
print(«Результат:1764»)
elif number==43:
print(«Результат:1849»)
elif number==44:
print(«Результат:1936»)
elif number==45:
print(«Результат:2025»)
elif number==46:
print(«Результат:2116»)
elif number==47:
print(«Результат:2209»)
elif number==48:
print(«Результат:2304»)
elif number==49:
print(«Результат:2401»)
elif number==50:
print(«Результат:2500»)
elif number==51:
print(«Результат:2601»)
elif number==52:
print(«Результат:2704»)
elif number==53:
print(«Результат:2809»)
elif number==54:
print(«Результат:2916»)
elif number==55:
print(«Результат:3025»)
elif number==56:
print(«Результат:3136»)
elif number==57:
print(«Результат:3249»)
elif number==58:
print(«Результат:3364»)
elif number==59:
print(«Результат:3481»)
elif number==60:
print(«Результат:36»)
elif number==61:
print(«Результат:36»)
elif number==62:
print(«Результат:36»)
elif number==63:
print(«Результат:36»)
elif number==64:
print(«Результат:36»)
elif number==65:
print(«Результат:36»)
elif number==66:
print(«Результат:36»)
elif number==67:
print(«Результат:36»)
elif number==68:
print(«Результат:36»)
elif number==69:
print(«Результат:36»)
#финальная консоль
close=input(«Хотите продолжить?(Да/Нет)»)
if close==»Нет»:
print(«До свидания =(«)
exit()
elif close==»Да»:
вот здесь нужно добавить перезапуск
Я знаю что можно было побыстрее весь код обернуть, но как то вот так, с английским худо поэтому на русском (
- Вопрос задан более года назад
- 3291 просмотр
1 комментарий
Простой 1 комментарий
Источник: qna.habr.com
Автоматический перезапуск скрипта python, даже если он вылетает в Linux
У меня есть программа на Python, которая должна работать все время. Если по какой-то причине он был остановлен, я хочу перезапустить его автоматически. Я подумал о cron, который будет запускаться каждые n секунд и проверять, работает ли программа. Мой сценарий оболочки выглядит так:
#!/usr/bin/env bash CM_COMMAND=`ps aux| grep abc| grep def| grep sudo` LEN_COMMAND=$ if[[«$LEN_COMMAND» -le «5»]] then echo «start the python program» fi exit
Когда я запускаю этот скрипт, я получаю сообщение об ошибке: my_prog.sh: line 4: $’if[[118r -le 5]]r’: command not found’
Как можно это сделать и в чем проблема с моим скриптом?
Комментарии (9)
Одна из проблем заключается в том, что когда кто-то запускает 6 произвольных команд sudo , соответствующих вашим grep , ваш скрипт не будет перезапущен.
Должен ли процесс python работать постоянно или его достаточно вызывать через определенный (более частый) интервал? Как быстро он должен перезапускаться, чтобы выполнить свою задачу?
Источник: reddeveloper.ru