¿Cómo puedo hacer que Bottle se reinicie al cambiar el archivo?

Estoy disfrutando mucho de Bottle hasta ahora, pero el hecho de que tengo que hacer CTRL + C fuera del servidor y reiniciarlo cada vez que hago un cambio de código es un gran éxito en mi productividad. He pensado en usar Watchdog para realizar un seguimiento de los archivos que cambian y luego reiniciar el servidor, pero ¿cómo puedo hacerlo cuando la función bottle.run está bloqueando?

Ejecutar el servidor desde una secuencia de comandos externa que vigila los cambios de archivos parece ser mucho trabajo para configurar. Creo que este era un problema universal para los desarrolladores de Bottle, CherryPy y etcétera.

Gracias por sus soluciones al problema!

Vea en el tutorial una sección titulada “Recarga automática”

Durante el desarrollo, debe reiniciar mucho el servidor para probar sus cambios recientes. El recargador automático puede hacer esto por usted. Cada vez que edita un archivo de módulo, el recargador reinicia el proceso del servidor y carga la versión más reciente de su código.

Esto da el siguiente ejemplo:

 from bottle import run run(reloader=True) 

Con

 run(reloader=True) 

hay situaciones en las que no se vuelve a cargar, como cuando la importación está dentro de una definición. Para forzar una recarga utilicé.

 subprocess.call(['touch', 'mainpgm.py']) 

y recarga bien en linux.

Use reloader=True en run() . Tenga en cuenta que en Windows esto debe estar bajo if __name__ == "__main__": debido a la forma en que funciona el módulo de multiprocessing .

 from bottle import run if __name__ == "__main__": run(reloader=True) 

Estos scripts deben hacer lo que buscas.

AUTOLOAD.PY

 import os def cherche(dir): FichList = [ f for f in os.listdir(dir) if os.path.isfile(os.path.join(dir,f)) ] return FichList def read_file(file): f = open(file,"r") R=f.read() f.close() return R def load_html(dir="pages"): FL = cherche(dir) R={} for f in FL: if f.split('.')[1]=="html": BUFF = read_file(dir+"/"+f) R[f.split('.')[0]] = BUFF return R 

MAIN.PY

 # -*- coding: utf-8 -*- #Version 1.0 00:37 import sys reload(sys) sys.setdefaultencoding("utf-8") import datetime import ast from bottle import route, run, template, get, post, request, response, static_file, redirect #AUTOLOAD by LAGVIDILO import autoload pages = autoload.load_html() BUFF = "" for key,i in pages.iteritems(): BUFF=BUFF+"@get('/"+key+"')\n" BUFF=BUFF+"def "+key+"():\n" BUFF=BUFF+" return "+pages[key]+"\n" print "=====\n",BUFF,"\n=====" exec(BUFF) run(host='localhost', port=8000, reloader=True)