これまでのところ、本当に楽しんでいます Bottle ですが、コードを変更するたびにサーバーからCTRL + Cを押して再起動する必要があるという事実は、生産性に大きな打撃を与えます。 Watchdog を使用してファイルの変更を追跡し、サーバーを再起動することを考えましたが、bottle.run
関数がブロックしています。
ファイルの変更を監視する外部スクリプトからサーバーを実行することは、セットアップする作業のlotのように見えます。これはBottle、CherryPyなどの開発者にとって普遍的な問題だったと思います。
問題の解決策をありがとう!
チュートリアルから "Auto Reloading" というタイトルのセクションをチェックしてください。
開発中は、最近の変更をテストするためにサーバーを何度も再起動する必要があります。自動リローダーはあなたのためにこれを行うことができます。モジュールファイルを編集するたびに、リローダーはサーバープロセスを再起動し、コードの最新バージョンをロードします。
これにより、次の例が得られます。
from bottle import run
run(reloader=True)
と
run(reloader=True)
インポートがdef内にある場合のように、リロードされない状況があります。私が使用したリロードを強制するために
subprocess.call(['touch', 'mainpgm.py'])
linuxでは正常にリロードされます。
run()
でreloader=True
を使用します。 Windowsでは、multiprocessing
モジュールの動作方法により、これはif __name__ == "__main__":
の下にある必要があることに注意してください。
from bottle import run
if __name__ == "__main__":
run(reloader=True)
これらのスクリプトは、探していることを実行する必要があります。
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)