【全文僅適用 Python3 】
不得不說,Python確實牛逼,不服不行。
先說需求,沒有需求驅動,都是沒有動力的。
需求:
手機每日下載圖片,然後需經過本人編寫的Python腳本處理一遍,再返回到手機上。
個人電腦不能保證時刻開機在線,自己也不可能一直在電腦旁邊,故欲將腳本放置雲服務器執行。因此,該雲服務器應有Web界面,供我上傳圖片和下載處理後的圖片。
簡單說,手機上傳圖片,服務器處理,手機下載結果圖片。
方案:
基於成本考慮,超過RMB 100元的都不考慮。看來看去,就A裏和X訊比較靠譜。於是使用新手特權購買X裏雲服務器一臺,配置較低:1核2G1M40G, CentOS7,但是價格非常之便宜,一年還不到100。這裏是優惠鏈接。
這麼低的配置,Java系就不考慮了。剛好圖像處理腳本是Python,何不直接用Python搭建HTTP Server。搜索之,果不期然,Python沒有讓我失望。
1. 神奇的Python
只用下面一句命令,即可搭建HTTP Server:
# 此爲Python3腳本,在cmd中運行此命令。(Python2腳本與此不同請自行百度)
# 9900 是端口號,可隨意設置
python -m http.server 9900
然後你就可以在瀏覽器中輸入:http://localhost:9900 ,就能看到一個空白頁面,這就說明HTTP Server已經運行了。
如果執行該命令的目錄內有文件,你輸入 http://localhost:9900,會看到該目錄下的所有文件列表,很像一個FTP服務器。
對,沒錯,只需這一句話,你的當前文件夾就變成了FTP服務器根目錄,局域網內都可以隨意下載文件。簡直是,內網搭建FTP服務器(發佈文件)之利器!
2. 上傳與下載
很可惜,這一行命令只能下載,沒有上傳界面。於是,我又是一番搜索,得知,成型的Python Web服務器有
Flask:輕量自由;
Django:大而全;
在我看來都複雜了,我不想因運行一個腳本而搭建個完整的Web服務器。最後,看中了只有一個文件的Python Web服務器 Bottle 。一個文件,這纔是小而美。
使用pip3安裝bottle:
pip3 install bottle
既然用到 bottle,就去看了幾篇帖子,該作者寫的Bottle系列文章都挺好,分享之。
參考該作者文章,我刪繁就簡,簡化成了1個Python文件。但是能實現:上傳界面,下載界面,調用服務器python腳本三大核心功能,最終實現手機即能下載到圖片處理結果。
#Python3腳本,不適用於Python2
#!/usr/bin/envpython
#coding=utf-8
from bottle import route,run,template,request,static_file
import os
import time
# 此處需改爲你的目錄地址
img_path='/home/unixq/testHttpServer/img' #定義上傳文件的保存路徑
# 此處可擴充爲完整HTML
uploadPage='''
<form action="upload" method="POST" enctype="multipart/form-data">
<input type="file" name="data" />
<input type="submit" value="上傳" />
</form>
'''
@route('/upload')
def upload():
return uploadPage
@route('/upload',method='POST')
def do_upload():
uploadfile=request.files.get('data') #獲取上傳的文件
uploadfile.save(img_path,overwrite=True) #overwrite參數是指覆蓋同名文件
os.system('python3 imgProcess.py') # 執行服務器本地Python腳本
time.sleep(3) # 等待3秒,待本地腳本執行完畢
return u"轉換成功,請點擊<a href='/download/output.jpg'>下載文件</a>"
@route('/download/<filename:path>')
def download(filename):
return static_file(filename,root=img_path,download=filename)
run(host='0.0.0.0',port=8899,debug=True)
上雲效果如下:(截圖由 Snapaste 軟件製作,大愛此軟件,寫博客必備)
最後,如果在雲服務器上執行時,使用 nohug 指令,可以使本腳本在我們關掉Shell的時候,依然在後臺執行.
其中 & 命令是使腳本在後臺執行。
$ nohup python3 upload.py &
查看所有在執行的任務:
$ jobs
把後臺任務調整到前臺,使用 fg %任務號;反之,使用 bg %任務號:
$ fg %3
$ bg %2
參考資料:https://www.aliyun.com/minisite/goods?userCode=f3xmzovo