使用markdown创作技术博客的示例-以Python完成定时截屏为例

WTCLAB.NET

0. 纪念今日数学家3.14

这里写图片描述这里写图片描述

1. 前言-撰写规范性要求

本示例为WTCLAB技术团队工程开发成员而作。为公开性技术文档作简单示例。

  1. 为了文档具有规范的格式,美观的文风,技术文档均应以MarkDown语言来进行书写。文档可在线编辑,也可采用离线MarkDown编辑工具Haroopad等(见http://blog.csdn.net/shaoyubin999/article/details/79490757 )来编辑。
  2. 文档应简要叙述技术原理,解决问题的思路和关键方法。
  3. 文档要求是原创,即作者亲自实验为有效的,并能经得起读者重做,能为读者提供充分的消息,以说明验证步骤,验证软件环境等。
  4. 所书的代码应采用CSDN标准推荐的代码格式化,并力图做到行级注释。
  5. 要给出代码的运行结果,可用截图,动画截图或屏幕视频来演示操作过程和结果。
  6. 一篇博客应只关注一个技术点的解决,要小而精,不要大而全。

2. 示例-用Python完成定时屏幕截图

2.1 原理描述

本例要求的关键技术是:

  1. 找到Python实现定时操作的方法,使得每3秒钟自动对当前屏幕进行截取并保存为指定的文件(如取名为doTimer.py)。
  2. 找到Python实现屏幕截取的方法,将之写为一个可单独执行的程序(如取名为 screen.py)。
  3. 找到命令行传参方法,使得执行doTimer.py时能调用screen.py。
  4. 实验操作环境:本例采用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

可以使用冒号来定义对齐方式:

项目价格数量
Computer1600 元5
Phone12 元12
Pipe1 元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)=(n1)!nN Γ ( n ) = ( n − 1 ) ! ∀ n ∈ N
  • 块级公式:

x=b±b24ac2a x = − b ± b 2 − 4 a c 2 a

更多LaTex语法请参考 这儿.

UML 图:

可以渲染序列图:

Created with Raphaël 2.1.2 张三 张三 李四 李四 嘿,小四儿, 写博客了没? 李四愣了一下,说: 忙得吐血,哪有时间写。

或者流程图:

Created with Raphaël 2.1.2 开始 我的操作 确认? 结束 yes no
  • 关于 序列图 语法,参考 这儿,
  • 关于 流程图 语法,参考 这儿.
离线写博客

即使用户在没有网络的情况下,也可以通过本编辑器离线写博客(直接在曾经使用过的浏览器中输入write.blog.csdn.net/mdeditor即可。Markdown编辑器使用浏览器离线存储将内容保存在本地。

用户写博客的过程中,内容实时保存在浏览器缓存中,在用户关闭浏览器或者其它异常情况下,内容不会丢失。用户再次打开浏览器时,会显示上次用户正在编辑的没有发表的内容。

博客发表后,本地缓存将被删除。 

用户可以选择 把正在写的博客保存到服务器草稿箱,即使换浏览器或者清除缓存,内容也不会丢失。

注意:虽然浏览器存储大部分时候都比较可靠,但为了您的数据安全,在联网后,请务必及时发表或者保存到服务器草稿箱

浏览器兼容
  1. 目前,本编辑器对Chrome浏览器支持最为完整。建议大家使用较新版本的Chrome。
  2. IE9以下不支持
  3. IE9,10,11存在以下问题
    1. 不支持离线功能
    2. IE9不支持文件导入导出
    3. IE10不支持拖拽文件导入


  1. 这里是 脚注内容.
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值