王秀木,殷軼娜,劉靜聞,黃淼婉,查 楠
(遼寧省地震局,遼寧 沈陽 110034)
隨著信息化進(jìn)程逐步推進(jìn),很多費(fèi)時(shí)、繁瑣的工作,都可以用軟件來代替人工操作。遼寧省地震局監(jiān)測(cè)中心因?qū)κ芯帧⑴_(tái)站的網(wǎng)絡(luò)運(yùn)行有評(píng)比要求,需要每天查看市局、臺(tái)站的網(wǎng)絡(luò)運(yùn)行值班日志,檢查日志主要是通過FTP 的傳輸。下載并查看上交情況,檢查日志內(nèi)容。對(duì)沒有上交或存在問題的市局、臺(tái)站進(jìn)行反饋。目前,每天需要檢查的臺(tái)站15 個(gè),市局12 個(gè)。信息網(wǎng)絡(luò)值班人員完成這項(xiàng)工作需要大量的時(shí)間和精力,非常繁瑣。為了解決實(shí)際問題、提高工作效率,需要建立一套合理、科學(xué)、實(shí)用的開發(fā)軟件??梢詫?shí)現(xiàn)FTP 同步下載、實(shí)時(shí)檢索并形成匯總?cè)罩?、語音提醒、自動(dòng)存儲(chǔ)等功能,從而實(shí)現(xiàn)操作流程自動(dòng)化,提高值班人員的工作效率。
Python,是一種直譯試、面向?qū)ο蟮挠?jì)算機(jī)程序設(shè)計(jì)語言,穩(wěn)定且成熟,現(xiàn)在它已成為一種功能強(qiáng)大的通用型語言,能夠輕松完成很多常見的任務(wù),它包含了一組完善而且容易理解的標(biāo)準(zhǔn)庫(kù),它采用縮進(jìn)來定義語句塊,這與其它大多數(shù)計(jì)算機(jī)程序設(shè)計(jì)語言不一樣,這使得它的語法非常簡(jiǎn)潔和清晰。
Python 語言的特點(diǎn):
(1) 免費(fèi)、開源
Python 是 FLOSS(自由/開放源碼軟件) 之一。使用者可以自由地發(fā)布這個(gè)軟件的拷貝、閱讀它的源代碼、對(duì)它做改動(dòng)、把它的一部分用于新的自由軟件中[1]。FLOSS 是基于一個(gè)團(tuán)體分享知識(shí)的概念。
(2) 可移植性
大多數(shù)Python 程序可以不經(jīng)過修改就在所有主流計(jì)算機(jī)平臺(tái)上運(yùn)行,并且Python 提供了各種可選的獨(dú)立程序,例如用戶圖形界面、數(shù)據(jù)庫(kù)訪問、基于Web 系統(tǒng)和提供了操作系統(tǒng)接口等。
(3) 面向?qū)ο?/p>
Python 既支持面向過程的編程同時(shí)還支持面向?qū)ο蟮木幊?。在“面向過程”的語言中,程序是由過程或僅僅是可重用代碼的函數(shù)構(gòu)建起來的。在“面向?qū)ο蟆钡恼Z言中,程序是由結(jié)合了數(shù)據(jù)和功能的對(duì)象構(gòu)建的。
(4) 可擴(kuò)展性
如果需要一段關(guān)鍵代碼運(yùn)行得更快或者希望某些算法不公開,可以部分程序用C 或C++編寫,然后在Python 程序中使用它們[2]。
(5) 豐富的庫(kù)
Python 含有許多預(yù)編譯且可移植的功能模塊,囊括了從字符模式到網(wǎng)絡(luò)編程等一系列應(yīng)用級(jí)編程任務(wù);除此之外,Python 還可以通過自行開發(fā)的庫(kù)和大量的第三方庫(kù)進(jìn)行簡(jiǎn)化編程,包括Web 開發(fā)、數(shù)值計(jì)算、游戲開發(fā)和其他應(yīng)用場(chǎng)景。
除了以上提到的各種優(yōu)點(diǎn),Python 也是有缺點(diǎn)的。比如運(yùn)行速度慢、代碼加密困難等。
本系統(tǒng)是集文件采集及管理為一體的應(yīng)用平臺(tái)。能夠?qū)⒋罅康奈募詣?dòng)下載、收集整理,如有未下載的文件立即自動(dòng)提醒值班人員,從而實(shí)現(xiàn)操作流程自動(dòng)化,提高工作效率(圖1)。
圖1 網(wǎng)絡(luò)運(yùn)行日志收集整理系統(tǒng)工作流程圖Fig.1 Flowchart of Network Running Log Collection and Finishing System
將網(wǎng)絡(luò)值班人員日常下載臺(tái)站網(wǎng)絡(luò)運(yùn)行值班日志的任務(wù)實(shí)現(xiàn)流程自動(dòng)化,實(shí)現(xiàn)管理系統(tǒng)的各項(xiàng)功能,主要包括:①臺(tái)站工作人員將日志上傳至FTP 后,通過本系統(tǒng)可以對(duì)已上傳的日志進(jìn)行自動(dòng)下載;②對(duì)不符合文件格式等原因的日志進(jìn)行重新下載;③成功下載的文件收集到指定文件夾中,并提示下載完成。
系統(tǒng)環(huán)境:Windows 7
開發(fā)工具:Python 3.6
編輯器:PyCharm
測(cè)試瀏覽器:Firefox ,Chrome
本系統(tǒng)基于Python 語言開發(fā),均有前臺(tái)展示端和后臺(tái)自動(dòng)管理端兩個(gè)部分,系統(tǒng)框架如圖2 所示。
圖2 系統(tǒng)框架圖Fig.2 Framework map of earthquake system
首先,需要搭建server 服務(wù)端,Web 服務(wù)的主要作用是,接收客戶端的請(qǐng)求。而Flask 框架較適合搭建Python 后臺(tái)server,F(xiàn)lask 框架是當(dāng)下流行的兩大Web 框架之一,它是用Python實(shí)現(xiàn)的。Flask 顯著的特點(diǎn)是核心的簡(jiǎn)單,但同時(shí)又易于擴(kuò)展。默認(rèn)情況下,F(xiàn)lask 不包含數(shù)據(jù)庫(kù)抽象層、表單驗(yàn)證,或是其它任何已有多種庫(kù)可以勝任的功能。然而,F(xiàn)lask 支持用擴(kuò)展來給應(yīng)用添加這些功能。眾多的擴(kuò)展提供了數(shù)據(jù)庫(kù)集成、表單驗(yàn)證、上傳處理、各種各樣的開放認(rèn)證技術(shù)等功能。
代碼如下:
from flask import Flask
app = Flask(__name__)
if __name__ == " __main__" :
通過調(diào)用run() 的方法使服務(wù)器運(yùn)行起來,如下:
app.run (host='0.0.0.0',port=8000)
通過 http://localhost:8000/static/index.html 或者h(yuǎn)ttp://localhost:8000 可以進(jìn)入網(wǎng)頁。
2.3.1 前臺(tái)展示端
通過使用url_for 函數(shù)可以讓前臺(tái)的畫面展示出來。在python+flask 的Web 開發(fā)中,url_for() 函數(shù)最簡(jiǎn)單的用法是以視圖函數(shù)名作為參數(shù),返回對(duì)應(yīng)的 URL,還可以用作加載靜態(tài)文件。通過http://localhost:8000/static/index.html 進(jìn)入網(wǎng)頁(圖3)
圖3 前臺(tái)視圖Fig.3 Front view
根據(jù)網(wǎng)絡(luò)運(yùn)行日志收集整理系統(tǒng)對(duì)前臺(tái)展示端的需求,功能如下:
路徑部分:可以選擇一個(gè)或多個(gè)臺(tái)站的路徑進(jìn)行下載。
執(zhí)行時(shí)間:時(shí)間輸入框,目的是做定時(shí)下載文檔的功能,如果不輸出時(shí)間信息的情況下,點(diǎn)擊“開始執(zhí)行”的按鈕,就會(huì)立即執(zhí)行下載工作,否則就按照指定時(shí)間執(zhí)行下載工作,為了讓值班員知道下載完成,會(huì)發(fā)出提示音,通知下載完成。
結(jié)果目錄:結(jié)果框中拷貝下載文件的名稱。
2.3.2 后臺(tái)管理端
后臺(tái)管理端主要實(shí)現(xiàn)網(wǎng)絡(luò)運(yùn)行日志收集整理系統(tǒng)的自動(dòng)下載、收集日志等功能。該系統(tǒng)主要使用Python 的軟件功能模塊進(jìn)行編譯,如圖4 所示。
圖4 功能模塊設(shè)計(jì)Fig.4 Function module design
(1) FTP 模塊:省局監(jiān)測(cè)中心因?qū)κ芯?、臺(tái)站的網(wǎng)絡(luò)運(yùn)行有評(píng)比要求,需要每天查看市局、臺(tái)站的網(wǎng)絡(luò)值班日志,現(xiàn)階段檢查日志主要是通過FTP 的傳輸。FTP 的全稱為File Transfer Protocol,是一種專門用來傳輸文件的協(xié)議。FTP的主要目的是允許用戶連接到遠(yuǎn)程計(jì)算機(jī)查看遠(yuǎn)程計(jì)算機(jī)上有哪些文件,然后把文件從遠(yuǎn)程計(jì)算機(jī)上復(fù)制到本地計(jì)算機(jī),或把本地計(jì)算機(jī)的文件傳送到遠(yuǎn)程計(jì)算機(jī)去[3]。
想要連接到FTP,需要先下載pip 工具,然后通過pip install ftplib,下載FTP 的第三方包。Ftplib 模塊連接和下載FTP 數(shù)據(jù),Python 中默認(rèn)安裝的ftplib 模塊定義了FTP 類,從選中的FTP網(wǎng)站中獲取文件,可以使用ftplib 庫(kù)。其中函數(shù)有限,可用來實(shí)現(xiàn)簡(jiǎn)單的FTP 客戶端,用于上傳或下載文件。在頁面點(diǎn)擊copy 按鈕時(shí),就可以成功連接到FTP,如圖5 所示。
圖5 FTP 連接頁面Fig.5 FTP Link page
(2) 日志模塊:當(dāng)臺(tái)站工作人員將日志通過FTP 上傳后,后臺(tái)開始自動(dòng)進(jìn)行下載,這時(shí)選擇進(jìn)行定時(shí)下載或者自動(dòng)循環(huán)時(shí)間下載,所需要用到datetime 模塊定義了以下幾個(gè)類;datetime.date():表示日期的類;datetime.time():表示時(shí)間的類;datetime.timedelta():表示時(shí)間間隔等關(guān)于使用到關(guān)于時(shí)間的模塊。下載時(shí)對(duì)于路徑的選擇需要用到os.path 模塊,路徑存在,下載日志;如果路徑不存在,重新下載。Shutil 模塊支持文件的復(fù)制與刪除操作。pyinotify模塊可以監(jiān)控文件夾內(nèi)的文件的創(chuàng)建,修改,讀取,刪除等一系列操作。
(3) 存儲(chǔ)模塊:將下載的日志放到指定文件夾。需要使用os 模塊包含許多用于操作文件和目錄的函數(shù),這些文件可以形成目錄。sys 模塊可獲得腳本的參數(shù)、處理模塊、使用sys 模塊操作模塊搜索路徑、查找內(nèi)建模塊、使查找已導(dǎo)入的模塊等作用等。
功能模塊的編譯界面,如圖6 所示。
圖6 功能模塊編譯Fig.6 Function module compilation
本系統(tǒng)部署環(huán)境為Windows Server 2007,利用Python3.6 為開發(fā)工具,采用Python 語言實(shí)現(xiàn)網(wǎng)絡(luò)運(yùn)行日志收集整理系統(tǒng)。通過前臺(tái)可視化展示、查詢以及后臺(tái)自動(dòng)下載等功能,值班人員可以選擇每天定時(shí)下載或者循環(huán)下載保證值班人員可以無需操作就可以完成下載任務(wù)。為網(wǎng)絡(luò)值班人員縮短了工作時(shí)間,提高了工作效率。
經(jīng)過應(yīng)用測(cè)試,本系統(tǒng)較好的滿足了值班人員的工作需要,系統(tǒng)運(yùn)維穩(wěn)定,主要功能均已實(shí)現(xiàn)。軟件后臺(tái)通過調(diào)用run() 的方法使服務(wù)器運(yùn)行起來,可以實(shí)現(xiàn)每天自動(dòng)下載軟件。
本系統(tǒng)具有以下性能:
(1) 易用性
查詢、添加、刪除,修改操作,輸入限制的正確性。
(2) 兼容性
軟件支持Window 下的IE 瀏覽器、火狐瀏覽器等。
(3) 安全性
保存某個(gè)登陸頁面,不能單獨(dú)對(duì)其進(jìn)行操作不進(jìn)行登陸,不允許直接進(jìn)入頁面URl 打開頁面并進(jìn)行操作。
網(wǎng)絡(luò)運(yùn)行日志收集整理系統(tǒng)基于Python 語言搭建Flask 框架,通過URL_FOR 方法展示前臺(tái)頁面,利用開源的Interface 接口與FTP 連接,完成軟件的編譯。實(shí)現(xiàn)了網(wǎng)絡(luò)值班日志的同步下載、批量檢索、創(chuàng)建值班日志目錄、短信提醒、自動(dòng)存儲(chǔ)等功能,滿足了遼寧地震監(jiān)測(cè)中心網(wǎng)絡(luò)值班辦公自動(dòng)化的需求。本系統(tǒng)在研發(fā)過程中也遇到諸如:FTP 接口實(shí)現(xiàn)、中文路徑無法識(shí)別等問題,但都通過項(xiàng)目組的不懈努力和不斷嘗試最終得以解決。隨著信息網(wǎng)絡(luò)技術(shù)的高速發(fā)展,本系統(tǒng)將會(huì)不斷地升級(jí)完善,使得功能更加強(qiáng)大,最大限度的省去人工操作,從而推進(jìn)地震監(jiān)測(cè)中心值班工作自動(dòng)化、規(guī)范化進(jìn)程。