1. 前言-撰写规范性要求
本示例为WTCLAB技术团队工程开发成员而作。为公开性技术文档作简单示例。
- 为了文档具有规范的格式,美观的文风,技术文档均应以MarkDown语言来进行书写。文档可在线编辑,也可采用离线MarkDown编辑工具Haroopad等(见http://blog.csdn.net/shaoyubin999/article/details/79490757 )来编辑。
- 文档应简要叙述技术原理,解决问题的思路和关键方法。
- 文档要求是原创,即作者亲自实验为有效的,并能经得起读者重做,能为读者提供充分的消息,以说明验证步骤,验证软件环境等。
- 所书的代码应采用CSDN标准推荐的代码格式化,并力图做到行级注释。
- 要给出代码的运行结果,可用截图,动画截图或屏幕视频来演示操作过程和结果。
- 一篇博客应只关注一个技术点的解决,要小而精,不要大而全。
2. 示例-用Python完成定时屏幕截图
2.1 原理描述
本例要求的关键技术是:
- 找到Python实现定时操作的方法,使得每3秒钟自动对当前屏幕进行截取并保存为指定的文件(如取名为doTimer.py)。
- 找到Python实现屏幕截取的方法,将之写为一个可单独执行的程序(如取名为 screen.py)。
- 找到命令行传参方法,使得执行doTimer.py时能调用screen.py。
- 实验操作环境:本例采用Python3完成(Anaconda 3, Windows 10)。
2.2 如何实现定时
引入time包,以time.sleep方法控制定时。
【例】
import time #引入time包
i=0
while True:
time.sleep(0.5) #设置定时为0.5秒
i=i+1
print("main running turns = "+str(i)) #每0.5秒打印输出一次
if i>=10:
break
print("finished") #打印到10次后结束,打出finished
程序执行后将每隔0.5秒打印出循环内输出字串,10次后结束。以下是在Anaconda 3下Spyder集成开发环境中的执行结果。
输出结果如下:
main running turns = 1
main running turns = 2
main running turns = 3
main running turns = 4
main running turns = 5
main running turns = 6
main running turns = 7
main running turns = 8
main running turns = 9
main running turns = 10
finished
2.3 如何实现命令行参数的传递
Python命令行参数传递很简单,直接上实验代码(chuanzhi.py)。
# chuanzhi.py
import sys
print(sys.argv[0]) #打印首参数(即文件名)
print(sys.argv[1]) #打印参数1
print(sys.argv[2]) #打印参数1
在windows控制台执行
C:> python chuanzhi.py abc 1234
结果是
C:> python chuanzhi.py abc 1234
chuanzhi.py
abc
1234
可见,Python用sys包来实现命令行传值。sys.argv[ ]依次获取包括执行程序文件名本身在内的参数字串。这样sys.argv [ 1 ] 就是字符串abc, sys.argv[ 2 ]就是字符串1234。而sys.argv [0]中则是文件名chuanzhi.py。
2.4 如何实现调用系统指令,使用Python调用Python
引入os包,用其中的os.system(“命令行”)方法,例如:
os.system(sys.argv[1])
将执行sys.argv[1]所引入的命令行。
2.5 如何实现屏幕截图
屏幕截图需要 ImageGrab的支持,具体方法是:
1、引入 ImageGrab
from PIL import ImageGrab
2、使用 ImageGrab的方法。 ImageGrab的方法有以下两个:
一、grab方法
函数原型
PIL.ImageGrab.grab(bbox=None)
用以截取屏幕bbox范围内的图片,默认截取全屏,例如:
ImageGrab.grab().show() #截取全屏并显示
ImageGrab.grab((0,0,100,100)).show()#截取左上角100px正方形
二、grabclipboard方法
函数原型
PIL.ImageGrab.grabclipboard()
用以获取剪切板内的图片
三、show方法
ImageGrab.grabclipboard().show()#获取剪切板内图片并显示
ImageGrab.grab().show() #截取全屏并显示
四、save方法
ImageGrab.save(filename)
其中filename字串这文件名(含扩展名),并由扩展名决定俣存图片的格式,如png,jpg等等。
2.6 综合上述技术,实现自动化定时截图并保存为以时间数为文件名的JPG图片
综合上述定时器、截屏、参数传递的基本使用方法,我们编写了试验测试程序如下。其中:
doTimer.py为主程序。
screen.py为被主程序调用的截屏程序。
doTimer.py代码:
## doTimer.py
import time,sys,os
while True:
os.system(sys.argv[1])
time.sleep(3) #每3秒启动一次
print("main running")
screen.py代码
## screen.py
from PIL import ImageGrab #引入截图处理包
import time
im = ImageGrab.grab() #截屏
filename=str(time.time()) #生成基于时间字串的文件名前缀
im.save(filename+'sybscreen.jpg') #保存截图为jpg文件
print( "screen... ctrl+C to break") #打印操作过程和提示
在Windows下调用格式为:
python doTimer.py “python screen.py”
2.7 如何将结果记录为GIF图片并展示出来
有很多工具软件可以对屏幕作动态记录并生成gif格式的动画文件。这里我用的是LICEcap,LICEcap是一款屏幕录制工具,支持导出 GIF 动画图片格式,轻量级、使用简单,录制过程中可以随意改变录屏范围。
(LICEcap下载参见腾讯 https://pc.qq.com/detail/0/detail_22760.html 或官网 http://www.cockos.com/licecap/)。
在Windows控制台执行
python doTimer.py “python screen.py”
可看到在默认文件夹下每3秒钟新产生一个新的jpg格式的截图文件。用LICEcap记录的动画如图。
最后以
Ctrl+C
来中断程序执行。
3. 下载
本例代码及文档的下载链接是:(建议使用百度网盘加密链接)
https://pan.baidu.com/s/129FheGJ1alYdlA3USj40RA
密码:dflq
4. 后记
以上演示了程序操作文档的写法。MARKDOWN编辑器使用很简单,其在文档格式化、数学公式编辑、流程图应用上功能比微软的WORD好很多。以下附录是CSDN自带的关于MARKDOWN编辑器的示例和说明。
5. 参考文献或参考网址
这里写入本文涉及的文献。
【1】 Anaconda下载: https://www.anaconda.com/download/
【2】spyder编辑器:http://pythonhosted.org/spyder/
【3】昆明理工大学无线通信团队:http://www.wtclab.net/
【4】清华大学开源软件镜像站:https://mirrors.tuna.tsinghua.edu.cn/
【5】Markdown 语法说明:http://wowubuntu.com/markdown/index.html