34

到目前为止,我真的很喜欢Bottle ,但是每次更改代码时我都必须 CTRL+C 退出服务器并重新启动它,这对我的工作效率造成了很大影响。我曾考虑使用看门狗bottle.run来跟踪文件更改然后重新启动服务器,但是当功能阻塞时我该怎么做。

从监视文件更改的外部脚本运行服务器似乎需要做很多工作。我认为这对于 Bottle、CherryPy 和其他开发人员来说是一个普遍的问题。

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

4

4 回答 4

51

从教程中查看题为“自动重新加载”的部分

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

这给出了以下示例:

from bottle import run
run(reloader=True)
于 2012-06-12T20:24:38.480 回答
4

run(reloader=True)

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

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

它在linux中重新加载很好。

于 2012-06-15T15:03:16.403 回答
3

reloader=True中使用run()if __name__ == "__main__":请记住,在 Windows 中,由于multiprocessing模块的工作方式,这必须低于。

from bottle import run

if __name__ == "__main__":
    run(reloader=True)
于 2016-05-22T06:41:48.680 回答
0

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

自动加载文件

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 

主文件

# -*- 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)
于 2017-08-21T22:46:39.023 回答