web-dev-qa-db-ja.com

ファイルの変更時にBottleを再起動するにはどうすればよいですか?

これまでのところ、本当に楽しんでいます Bottle ですが、コードを変更するたびにサーバーからCTRL + Cを押して再起動する必要があるという事実は、生産性に大きな打撃を与えます。 Watchdog を使用してファイルの変更を追跡し、サーバーを再起動することを考えましたが、bottle.run関数がブロックしています。

ファイルの変更を監視する外部スクリプトからサーバーを実行することは、セットアップする作業のlotのように見えます。これはBottle、CherryPyなどの開発者にとって普遍的な問題だったと思います。

問題の解決策をありがとう!

28
Hubro

チュートリアルから "Auto Reloading" というタイトルのセクションをチェックしてください。

開発中は、最近の変更をテストするためにサーバーを何度も再起動する必要があります。自動リローダーはあなたのためにこれを行うことができます。モジュールファイルを編集するたびに、リローダーはサーバープロセスを再起動し、コードの最新バージョンをロードします。

これにより、次の例が得られます。

from bottle import run
run(reloader=True)
46
Mark Hildreth

run(reloader=True)

インポートがdef内にある場合のように、リロードされない状況があります。私が使用したリロードを強制するために

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

linuxでは正常にリロードされます。

3
f p

run()reloader=Trueを使用します。 Windowsでは、multiprocessingモジュールの動作方法により、これはif __name__ == "__main__":の下にある必要があることに注意してください。

from bottle import run

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

これらのスクリプトは、探していることを実行する必要があります。

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)
0
Cyril Coelho