0. 纪念今日数学家3.14
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.argv1所引入的命令行。
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
6. 附录:关于MARKDOWN编辑文档
本附录是CSDN自带的关于MARKDOWN编辑器的示例和说明。
CSDN关于使用Markdown编辑器写博客的说明
本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:
- Markdown和扩展Markdown简洁的语法
- 代码块高亮
- 图片链接和图片上传
- LaTex数学公式
- UML序列图和流程图
- 离线写博客
- 导入导出Markdown文件
- 丰富的快捷键
快捷键
- 加粗
Ctrl + B
- 斜体
Ctrl + I
- 引用
Ctrl + Q
- 插入链接
Ctrl + L
- 插入代码
Ctrl + K
- 插入图片
Ctrl + G
- 提升标题
Ctrl + H
- 有序列表
Ctrl + O
- 无序列表
Ctrl + U
- 横线
Ctrl + R
- 撤销
Ctrl + Z
- 重做
Ctrl + Y
Markdown及扩展
Markdown 是一种轻量级标记语言,它允许人们使用易读易写的纯文本格式编写文档,然后转换成格式丰富的HTML页面。 —— [ 维基百科 ]
使用简单的符号标识不同的标题,将某些文字标记为粗体或者斜体,创建一个链接等,详细语法参考帮助?。
本编辑器支持 Markdown Extra , 扩展了很多好用的功能。具体请参考Github.
表格
Markdown Extra 表格语法:
项目 | 价格 |
---|---|
Computer | $1600 |
Phone | $12 |
Pipe | $1 |
可以使用冒号来定义对齐方式:
项目 | 价格 | 数量 |
---|---|---|
Computer | 1600 元 | 5 |
Phone | 12 元 | 12 |
Pipe | 1 元 | 234 |
定义列表
-
Markdown Extra 定义列表语法:
项目1
项目2
- 定义 A
- 定义 B 项目3
- 定义 C
-
定义 D
定义D内容
代码块
代码块语法遵循标准markdown代码,例如:
@requires_authorization
def somefunc(param1='', param2=0):
'''A docstring'''
if param1 > param2: # interesting
print 'Greater'
return (param2 - param1 + 1) or None
class SomeClass:
pass
>>> message = '''interpreter
... prompt'''
脚注
生成一个脚注1.
目录
用 [TOC]
来生成目录:
数学公式
使用MathJax渲染LaTex 数学公式,详见math.stackexchange.com.
- 行内公式,数学公式为: Γ(n)=(n−1)!∀n∈N Γ ( n ) = ( n − 1 ) ! ∀ n ∈ N 。
- 块级公式:
更多LaTex语法请参考 这儿.
UML 图:
可以渲染序列图:
或者流程图:
离线写博客
即使用户在没有网络的情况下,也可以通过本编辑器离线写博客(直接在曾经使用过的浏览器中输入write.blog.csdn.net/mdeditor即可。Markdown编辑器使用浏览器离线存储将内容保存在本地。
用户写博客的过程中,内容实时保存在浏览器缓存中,在用户关闭浏览器或者其它异常情况下,内容不会丢失。用户再次打开浏览器时,会显示上次用户正在编辑的没有发表的内容。
博客发表后,本地缓存将被删除。
用户可以选择 把正在写的博客保存到服务器草稿箱,即使换浏览器或者清除缓存,内容也不会丢失。
注意:虽然浏览器存储大部分时候都比较可靠,但为了您的数据安全,在联网后,请务必及时发表或者保存到服务器草稿箱。
浏览器兼容
- 目前,本编辑器对Chrome浏览器支持最为完整。建议大家使用较新版本的Chrome。
- IE9以下不支持
- IE9,10,11存在以下问题
- 不支持离线功能
- IE9不支持文件导入导出
- IE10不支持拖拽文件导入
- 这里是 脚注 的 内容. ↩