到目前为止我真的很享受Bottle,但事实上我必须将CTRL + C从服务器中移出并在每次更改代码时重新启动它,这对我的工作效率影响很大。我已经考虑使用Watchdog来跟踪文件更改然后重新启动服务器,但是当bottle.run
函数阻塞时我该怎么做呢。
从监视文件更改的外部脚本运行服务器似乎需要设置的很多工作。我认为这是Bottle,CherryPy和其他开发人员的普遍问题。
感谢您解决此问题!
答案 0 :(得分:46)
从教程中查看标题为"Auto Reloading"
的部分在开发过程中,您必须重新启动服务器以测试您的服务器 近期变动。自动重新加载器可以为您完成此操作。每次你 编辑模块文件,重新加载器重新启动服务器进程并加载 最新版本的代码。
这给出了以下示例:
from bottle import run
run(reloader=True)
答案 1 :(得分:3)
用
run(reloader=True)
有些情况下,当导入在def中时,它不会重新加载。为了强制重新加载,我使用了
subprocess.call(['touch', 'mainpgm.py'])
它在linux中重新加载。
答案 2 :(得分:1)
在reloader=True
中使用run()
。请注意,在Windows中,由于if __name__ == "__main__":
模块的工作方式,因此必须位于multiprocessing
下。
from bottle import run
if __name__ == "__main__":
run(reloader=True)
答案 3 :(得分:0)
这些脚本应该可以满足您的需求。
<强> 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)