如何让 Bottle 在文件更改时重新启动?

问题描述 投票:0回答:4

到目前为止,我真的很喜欢Bottle,但事实上,每次更改代码时我都必须按 CTRL+C 退出服务器并重新启动服务器,这对我的工作效率造成了很大影响。我考虑过使用 Watchdog 来跟踪文件更改,然后重新启动服务器,但是当

bottle.run
函数阻塞时,我该如何做到这一点。

从监视文件更改的外部脚本运行服务器似乎需要进行大量的设置工作。我认为这是 Bottle、CherryPy 等开发人员的普遍问题。

感谢您对问题的解决方案!

python cherrypy bottle
4个回答
55
投票
查看教程中标题为“自动重新加载”的部分:

在开发过程中,您必须多次重新启动服务器来测试您最近的更改。自动重新加载器可以为您做到这一点。每次编辑模块文件时,重新加载器都会重新启动服务器进程并加载最新版本的代码。

这给出了以下示例:

from bottle import run run(reloader=True)

然后你可以在运行时区分子进程:
os.environ.get('BOTTLE_CHILD') == 'true'


4
投票
run(reloader=True)

在某些情况下,它不会重新加载,就像导入在 def 中一样。为了强制重新加载,我使用了

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

并且它在 Linux 中重新加载得很好。
    


3
投票
中使用

run()

。  请记住,在 Windows 中,由于 
if __name__ == "__main__":
 模块的工作方式,它必须位于 
multiprocessing
 下。
from bottle import run

if __name__ == "__main__":
    run(reloader=True)

这些脚本应该可以满足您的需求。

-1
投票

自动加载.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

主要.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)


© www.soinside.com 2019 - 2024. All rights reserved.