world tutorial micro hello framework example app python cherrypy bottle

python - tutorial - hello world bottle



¿Cómo puedo hacer que Bottle se reinicie con el cambio de archivo? (4)

Realmente estoy disfrutando 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 hacer un seguimiento de los archivos que cambian y luego reiniciar el servidor, pero ¿cómo puedo hacer eso cuando la función bottle.run está bloqueando?

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

Gracias por sus soluciones al problema!


Con

run(reloader=True)

hay situaciones en las que no se recarga 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.


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)


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)


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)