一、QPython
前几天逛Google Play的时候无意间发现了一个叫“QPython”的应用。其最大的特点就是可以在Android设备上运行Python脚本。 同时还有Python2和Python3的不同版本,甚至支持PIP安装第三方包。官网打出的广告也是”Python on Android.”。这下真是”Code anywhere”了。
而且通过在QPython中import特有的androidhelper
包,还可以调用各种Android的API接口,实现各种功能。
1.Hello World小程序
例如下面的代码演示了让用户输入文字,并将其以Toast的方式显示的程序。
import androidhelper
droid = androidhelper.Android()
respond = droid.dialogGetInput("Hello", "What is your name?")
print respond
name = respond.result
if name:
message = 'Hello, %s!' % name
else:
message = "Hey! You didn't tell me your name."
droid.makeToast(message)
程序打开界面如下,有终端、编辑器、文件等功能。 然后在编辑器中打开上面这段代码,如下所示。 然后按底下的运行按钮,就会开始执行脚本了。弹出对话框,输入名字则会显示结果。
上面是最基本的QPython编程的例子,其实还可以进行更复杂的操作,如调用相机、手机震动等等。 官网更多内容在这里。也许我们可以用Python基于这些API开发出一个应用出来。
2.包管理
在QPython中也可以使用PIP进行包管理。进入“QPYPI”可以看到有些是内置的,直接点击下载就可以安装使用。 点击最上面即可进入PIP。例如我们可以安装一个wheel包。 然后就可以使用了。不过经过测试还是有一定局限性的,只能安装一些不需要编译的包,不能安装很复杂的包,如opencv等。
二、Python跨平台试验
虽然之前一直都知道Python是跨平台的,但一直没有自己尝试过。所以就简单写了个脚本。分别在Windows、Ubuntu、CentOS和Android上跑了。 这个脚本功能是搜索指定路径下的指定类型的图片文件,并将其进行高斯模糊,最后保存成新的图片。代码如下。
# coding= utf-8
import os
import platform
from PIL import Image, ImageFilter
def findAllFiles(root_dir, type):
paths = []
names = []
for parent, dirname, filenames in os.walk(root_dir):
for filename in filenames:
if filename.endswith(type):
paths.append(parent)
names.append(filename)
print paths.__len__(), " files found."
return paths, names
def imageBlur(paths, names, separator):
for i in range(len(paths)):
img = Image.open(paths[i] + separator + names[i])
img = img.filter(ImageFilter.GaussianBlur)
img.save(paths[i] + separator + names[i].split(".")[0] + "_blur.png")
print ((i + 1) * 1.0 / len(paths)) * 100, "% IMG saved at ", paths[i] + separator + names[i].split(".")[
0] + "_blur.png"
def getOSType():
print platform.uname()
def getSeparator():
sysstr = platform.system()
if (sysstr == "Windows"):
separator = "\\"
elif (sysstr == "Linux"):
separator = "/"
else:
separator = "/"
return separator
getOSType()
root_dir = raw_input("Input parent path of files:\n")
file_type = raw_input("Input type of images:\n")
paths, names = findAllFiles(root_dir, file_type)
imageBlur(paths, names, getSeparator())
1.Android平台
在test文件夹中准备了几个不同类型的文件如下。 在QPython中打开代码文件并运行,控制台输出如下,提示运行成功。 在文件管理器中可以看到,多了新生成的图片文件。在Android平台测试成功。 不过后来又在QPython上测试了如Matplotlib绘图等代码,报错运行不了。 看来还是有一定局限性的,并不是所有的代码都可以运行。
2.CentOS平台
将文件放到我的服务器上测试,服务器是CentOS 7。控制台输出如下,也成功运行,测试成功。
3.Ubuntu平台
在电脑上的Ubuntu下运行,也测试成功。
4.Windows平台
最后在Windows上运行,结果和输出如下。 测试成功。
三、小结
最后小结一下。Python的跨平台能力确实很厉害,提供的API也是高度抽象的。
程序员无需去管不通系统下到底如何遍历文件,只需要一句os.walk()
即可获得想要的结果。
也算是一种提高工作效率的方式吧。最近在用Python批处理统计一些数据,深刻感受到提高了我的效率,节省了很多时间。
让我有空能玩手机、逛B站。人生苦短,我用Python吧。
本文作者原创,未经许可不得转载,谢谢配合