到目前为止,我真的很喜欢Bottle,但事实上,每次更改代码时我都必须按 CTRL+C 退出服务器并重新启动服务器,这对我的工作效率造成了很大影响。我考虑过使用 Watchdog 来跟踪文件更改,然后重新启动服务器,但是当
bottle.run
函数阻塞时,我该如何做到这一点。
从监视文件更改的外部脚本运行服务器似乎需要进行大量的设置工作。我认为这是 Bottle、CherryPy 等开发人员的普遍问题。
感谢您对问题的解决方案!
run(reloader=True)
在某些情况下,它不会重新加载,就像导入在 def 中一样。为了强制重新加载,我使用了
subprocess.call(['touch', 'mainpgm.py'])
并且它在 Linux 中重新加载得很好。
在
run()
。 请记住,在 Windows 中,由于
if __name__ == "__main__":
模块的工作方式,它必须位于
multiprocessing
下。
from bottle import run
if __name__ == "__main__":
run(reloader=True)
这些脚本应该可以满足您的需求。自动加载.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)