Как я могу получить бутылку для перезагрузки при изменении файла?

Я действительно наслаждаюсьбутылка пока что, но тот факт, что мне приходится нажимать CTRL + C на сервере и перезапускать его каждый раз, когда я делаю изменение кода, сильно сказывается на моей производительности. Я думал об использованииСторожевая собака чтобы отслеживать изменения файлов, а затем перезапустить сервер, но как я могу это сделать, когдаbottle.run функция блокирует.

Запуск сервера из внешнего скрипта, который отслеживает изменения файлов, выглядит какlot работы по настройке. Я думаю, что это была универсальная проблема для разработчиков бутылок, CherryPy и так далее.

Спасибо за ваши решения проблемы!

Ответы на вопрос(4)

reloader=True вrun(), Имейте в виду, что в окнах это должно быть подif __name__ == "__main__": из-за того, какmultiprocessing Модуль работает.

from bottle import run

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

С

run(reloader=True)

бывают ситуации, когда он не перезагружается, например, когда импорт находится внутри def. Для принудительной перезагрузки я использовал

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

и он прекрасно перезагружается в Linux.

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)
Решение Вопроса

& quot; Автозагрузка & quot;

During development, you have to restart the server a lot to test your recent changes. The auto reloader can do this for you. Every time you edit a module file, the reloader restarts the server process and loads the newest version of your code.

Это дает следующий пример:

from bottle import run
run(reloader=True)
 12 июн. 2012 г., 22:31
К сожалению, у меня нет достаточного опыта, чтобы говорить так или иначе.
 13 июн. 2012 г., 14:40
Он просматривает все импортированные модули и затем полностью перезапускает процесс сервера. В настоящее время нет способа добавить дополнительные файлы в список наблюдения (например, шаблоны), но шаблоны в любом случае не кэшируются в режиме отладки.
 Hubro15 июн. 2012 г., 15:43
Хотел бы я сказать, чтобы он перезагружался каждый раз, когда я меняю свои файлы конфигурации, хотя
 26 июн. 2012 г., 06:13
Чтобы определить точку, вы можете включить отладку:from bottle import debug ... debug(True)
 Hubro12 июн. 2012 г., 22:30
О, круто! Есть ли ситуации, в которых это не сможет перезагрузить модуль? Я предполагаю, что это смотрит все импортированные модули

Ваш ответ на вопрос