【全文仅适用 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