1. 程式人生 > >Python廖雪峰實戰web開發(Day13-提高開發效率)

Python廖雪峰實戰web開發(Day13-提高開發效率)

在編寫handler時,每次修改Python程式碼,都必須在命令列先Ctrl-C停止伺服器,再重啟,改動才能生效。
有沒有辦法讓伺服器檢測到程式碼修改後自動重新載入呢?
思路是檢測www目錄下的程式碼改動,一旦有改動,就自動重啟伺服器。
按照這個思路,我們可以編寫一個輔助程式pymonitor.py讓它啟動webapp.py,並時刻監控www目錄下的程式碼改動,有改動時,先把當前webapp.py程序殺掉,再重啟,就完成了伺服器程序的自動重啟。
這裡使用得是Python第三方庫watchdog

C:\Uers\Administrator>pip3 install watchdog

利用watchdog接收檔案變化的通知,如果是.py檔案,就自動重啟webapp.py程序。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

'''
建立監視修改重啟程式
'''

__author__ = 'Seiei'

import os, time, sys, subprocess
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler


def log(s):
    print('[Monitor] %s' % s)

command = ['echo'
, 'ok'] #重啟操作檔案的資訊 process = None #退出程式 def kill_process(): global process if process: log('Kill process [%s]...' % process.pid) process.kill() process.wait() log('Process ended with code %s.' % process.returncode) process = None #開始程式 def start_process
():
global process, command log('Start process %s...' % ' '.join(command)) process = subprocess.Popen(command, stdin=sys.stdin, stdout=sys.stdout, stderr=sys.stderr) #重啟程式 def restart_process(): kill_process() start_process() #編輯MyFileSystemEventHander class MyFileSystemEventHander(FileSystemEventHandler): def __init__(self, fn): super(MyFileSystemEventHander, self).__init__() self.restart = fn #匯入重啟函式restart_process,沒括號 def on_any_event(self, event): if event.src_path.endswith('.py'): #監視`.py`字尾檔案發生改變 log('Python source file changed: %s' % event.src_path) self.restart() #監視 def start_watch(path, callback): observer = Observer() observer.schedule(MyFileSystemEventHander(restart_process), path, recursive=True) observer.start() log('Watching directory %s...' % path) start_process() try: while True: time.sleep(0.5) except KeyboardInterrupt: observer.stop() observer.join() if __name__ == '__main__': argv = sys.argv[1:] #用於在命令列取程式外部輸入引數-->http://www.cnblogs.com/aland-1415/p/6613449.html if not argv: print('Usage: ./pymonitor your-script.py') exit(0) if argv[0] != 'python': argv.insert(0, 'python') command = argv #操作檔案的名字及程式名 path = os.path.abspath('.')#根據這監視路徑,那檔案就得放在監視檔案的相同路徑上 start_watch(path, None)

然後把其命名為pymonitor.py存放到相應的路徑上,在命令列執行:

E:\web_app>pymonitor.py webapp.py

再修改一下相應的handler,看網頁是否重啟了~

另外使用sublime和chrome的,這裡有個Live​Reload外掛,在改動php, html,css,js都能重刷chrome,這樣修改網頁起來,只需在編輯器上儲存就可以在瀏覽器檢視最新的頁面了,不用到瀏覽器上按重新整理。
這裡找了個安裝教程

相關推薦

Python雪峰實戰web開發Day13-提高開發效率

在編寫handler時,每次修改Python程式碼,都必須在命令列先Ctrl-C停止伺服器,再重啟,改動才能生效。 有沒有辦法讓伺服器檢測到程式碼修改後自動重新載入呢? 思路是檢測www目錄下的程式

Python雪峰實戰web開發Day5-編寫web框架

因為複雜的Web應用程式,光靠一個WSGI(Web Server Gateway Interface)函式來處理還是太底層了,我們需要在WSGI之上再抽象出Web框架(比如Aiohttp、Django、Flask等),從而進一步簡化Web開發。 在da

Python雪峰實戰web開發Day7-編寫MVC

MVC:Model-View-Controller,中文名“模型-檢視-控制器”。 其中Python處理的URL函式就是C:Controller,Controller主要負責業務邏輯,比如檢

Python雪峰實戰web開發Day12-編寫日誌列表頁

編寫一個日誌列表頁,想想我們期待它是怎樣的,有什麼樣的功能。 其實也無非諸如點進,刪除,修改日誌,把資料庫的日誌按照格式顯示在網頁面上,比方說一個網頁面設定顯示十篇日誌,當資料庫不足20篇日誌有超過1

Python雪峰實戰web開發Day10-使用者註冊

使用者管理是絕大部分Web網站都需要解決的問題。使用者管理涉及到使用者註冊和登入。 由於本人是程式設計小白,初學python,暫時對js、html等都不太熟悉,所以如有紕漏,還請指出。 1. 使用者註冊 1.1 編寫使用者註冊API

Python雪峰實戰web開發(Day6-編寫配置檔案)

通常,一個Web App執行的時候都要讀取配置檔案,比如資料庫的名字,口令等,在不同的環境中執行,可以讀取不同的配置檔案。 由於Python本身語法簡單,完全可以用原始碼來實現配置。 預設的配

ORM框架疏理——雪峰實戰系列

命令 delete ica 隱式 orm mod prim 數據結構 lam ORM(Object Relational Mapping,對象關系映射),是一種程序設計技術,用於實現面向對象編程語言裏不同類型系統的數據之間的轉換。從效果上來說,它其實創建了一個可在編程語言裏

Python教程--雪峰練習參考彙總

題源:廖老師的官網 小生全是為了方便後期程式碼整理,從多篇大佬中的文章引用了程式碼,如有冒犯之處,請聯絡小生。 練習 小明的成績從去年的72分提升到了今年的85分,請計算小明成績提升的百分點,並用字串格式化顯示出’xx.x%’,只保留小數點後1位: #

雪峰JavaScript學習筆記基礎及資料型別、變數

先睹為快 alert('我要學JavaScript!'); Run: 基本語法: 1.每個語句以;結束,不強制 2.語句塊用{...} 3.//單行註釋,/*...*/ 多行註釋 資料型別: 1.不區分整數,浮點數,統一用number~ 以下也屬於number型別~ NaN;

雪峰 JavaScript 學習筆記字串、陣列和物件

字串 1.和python一樣,也是用' '或" "括起來的字元表示。但多行字串是用反引號(esc下鍵)``,與之相對的是Python用''' '''三引號表示; 2.轉義字元:\ 3.換行符:\n 4.製表符:\t 5.多個字串用 + 連線 6.模板字串: ${變數}  例

Safari 除錯iPhone web頁面App為開發

1、Safari設定: 開啟Safari偏好者設定,選中“高階選單”,將頁面最下方的“在選單中顯示開發選單”複選框打鉤,這樣設定完畢後就能在Safari選單中看到開發選單 2、iPhone 設定: 開啟iPhone手機設定——>選擇Safari,找到高階選項,有JavaScrip

3 用python進行OpenCV實戰之畫圖直線,矩形,圓形

前言 在上一節我們通過使用NumPy的陣列分割成功的在我們的影象上畫了一個綠色的方塊,但是如果我們想畫一個單一的線條或者圓圈該怎麼辦呢?NumPy沒有提供相關的功能,但是OpenCV提供了相關的函式,在本節就將為大家介紹三個基本的OpenCV畫圖方法:

Selenium2 Python 自動化測試實戰學習筆記

第五章          自動化測試模型 一個自動化測試框架就是一個整合體系,在這一體系中包含測試功能的函式庫、測試資料來源、測試物件識別標準,以及種可重用的模組。自動化測試框架在發展的過程中經歷了幾個階段,線性測試、模組驅動測試、資料驅動測試、關鍵字驅動測試。 Pytho

python flask 簡單登陸web製作

5.將前端資料傳至後端: 上一節我們完成了一個基本框架,這裡在複習下git,進入目錄滑鼠右鍵開啟git,輸入如下命名儲存、檢視。 然後我們繼續改進程式碼,修改main.py為 from flask import Flask,render_template #匯入render_tem

python flask 簡單登陸web製作

剛學flask,感覺flask真的很簡潔。然後做了一個很低階的登陸頁面。就當一次小筆記,希望之後還可以補充。 1.配置環境: 首先要pip install flask配置好flask,然後我用的notepad++來編輯程式碼,用git來做版本控制。 2.基本程式碼: 然後在confi

Java Web開發-簡單的Java Web專案含訪問本地MySQL-應用例程

一、例程簡介     本例程可配合Android例程MyApplication測試使用,包含一個TestServlet,用於接收POST請求,訪問本地MySQL資料並返回對應訊息。     Android例程的開發請看:http://blog.csdn.net/sinat_

python:雪峰教程——python基礎:資料型別和變數 轉義符練習

1、通過s1 ,s2 可以知道  r'      '或者r"       "表示的是內部' '或者" "的字串預設不轉義2、最後一個s4我們也可以用''' '''來進行換行的操作規範:'''line1             line2     

手機訪問本地開發web頁面http-server的配置

需要本地有node環境;沒有的自行安裝配置好。 手機與電腦處於同一區域網之下。 安裝http-server: npm intstall http-server 進入本地檔案所在資料夾輸入:

實戰WEB 伺服器JAVA編寫WEB伺服器

  一、超文字傳輸協議     1.1 HTTP請求     1.2 HTTP應答   二、Socket類   三、ServerSocket類   四、Web伺服器例項     4.1 HttpServer類     4.2 Request類     4.3 Response

微信公眾平臺接口開發全面認識接口

之間 com pps https cli tps grant 微信接口 apps 微信公眾平臺接口的整體介紹 接口API的定義 不同功能層之間的通個信規則稱為接口API 微信接口請求返回格式介紹: 微信接口是通過GET方法請求的,如: https://api.weixin.