python打造专业命令行脚本

在linux系统中运行某些系统命令时,这些命令可以通过增加不同参数实现不同功能, 例如典型的nmap命令,就可以通过组合不同参数实现扫描结果,设想下如果我们写的脚本也能支持根据选择的不同参数来实现不同的运行结果,是不是显得非常专业化,所以今天我们就来看一段代码,看如何实现带命令行参数的脚本,按惯例,我们先看代码:

脚本用到了subprocess和optparse,前者可以调用系统命令,后者就是来实现如何自定义参数来执行脚本,shell命令的部分比较简单,在此不在讲了,接下来runBash()函数是返回命令执行结果的,这里大家[……]

继续阅读

脚本运行时间

作为一名运维人员来说,在早期服务器数量较少时,主要是实现功能为主,大部分时间你是不需要关心脚本运行时间的,但随着你管理的服务器越来越多,那最早版本的脚本运行时间就是瓶颈,有的甚至慢到你想砸电脑的地步,你以为它死了,其实它还活着,总在不经意间给你一个特别的惊喜,如果出现这种情况,基本就要优化代码了,同时如果你想统计优化完时间到底缩短了多少,也会有很多方法,但我们今天主要来看如何用python实现时间统计,先上代码:

脚本非常简单,先定义一个类,然后定义构造器方法(__init__),就是获取了当前的时间time.time(),[……]

继续阅读

自动添加python脚本头信息

写脚本时一般每个人写的格式都会有所不同,有的会注明脚本本身的一些信息,有的则开门见山,这在小团队里其实没什么,基本别人做什么你也都知道,但如果放到大的团队就比较麻烦了,因为随着人数的增多,脚本成指数增长,如果每个人风格不统一,到最后就会造成非常大的弊端,尤其是在人员离职甩锅后,接锅侠就比较悲催,一堆脚本功能不知道,谁写的不清楚,当然你会说,我重新看一遍不行了,从某种意义上说也没错,不过你可知时间就是新版毛爷爷,你跟老板说给我一个月时间我去看下之前的脚本代码,我估计老板一万个不会答应,因为从管理的角度这个个事对公司或部门价值很小,所以当团队人数增长后,就必须有一套标准,形成大家统一的编码规则,这[……]

继续阅读

python验证用户名和密码

这篇是接上一篇内容,上篇实现了如何将明文的密码加密写入数据库中,我们今天这段代码就是实现如何让用户输入用户名和密码,然后跟数据库中的信息进行比较,如果匹配就显示登陆成功,如果密码错误将提示用户继续输入,用户可输入三次密码尝试,如果都输入错误就直接退出,如果有一次正确就表示登陆成功,接下来我们来看脚本实现:

脚本解释,根据用户输入的用户名,从数据库中查询用户名和密码,此处写的教简单,正常应先判断是否有这个用户名,如果没有就直接返回错误,有兴趣的兄弟自己加代码测试吧,从数据库中获取数据用的游标对象,fetchone()函数将获取[……]

继续阅读

如何在数据库中存储加密后的密码?

在我们日常开发运维平台中,如果公司对安全要求比较高,一般数据库中都存储的都是用户加密后的密码,这样即使某些人侥幸得到数据库权限,也无法得知用户明文密码,这主要是从安全角度来考虑的,那如何将用户输入的明文密码转为加密后的密码呢? 我们今天这篇文章就给出一个小例子,让大家看看如何实现,按惯例,我们先上代码:

脚本逐行解释, 前几行是导入的标准模块,hashlib模块作用是生成密码散列和消息摘要,getpass模块是用户输入密码,不在控制台回现,sqlite3模块是python与sqlite库交互的接口。脚本再往下是定义了2个函数[……]

继续阅读

利用Ansible api建立运维资产库

在日常运维管理中,随着公司业务壮大,运维可能需要管理的机器越来越多,一旦机器数量到了一定规模,机器的属性信息如果没有集中管理好,就会很容易造成人为事故的发生, 所以能否建立一个完善的运维信息资产库对运维人员来说至关重要,那如何建立一个运维资产库?如何能让资产库信息实时同步线上机器信息?带着疑问,我们接下来看如何利用ansible api来做一个简单的运维资产库,这个脚本主要是利用了ansible api来进行对客户机信息的收集,然后将收集的信息insert 到db库中,我这里例子是采用的sqlite数据库,其它不多说了,看代码:

继续阅读

Ansible从入门到精通(一)

现在做运维的估计都对ansible不陌生了,如果还没有使用过的,我建议尽快尝试下这个技术,入门非常简单,一旦你运用熟练,将大大减轻运维工作的压力,ansible只需要在主控端安装,客户端无需做任何操作即可对被控端进行批量操作,这也是相对于saltstack的一个优点,saltstack除了在主控端安装外,客户机要安装客户端,其它不多说了,如果有兴趣的可以百度,这种文章已经满大街都是了,回到正题,今天这篇我们还是主要来介绍介绍ansible如果在运维中的应用,本来我刚开始打算用一篇来完成对ansible的介绍,在实际写的过程中才发现,如果只用一篇来写,那篇幅就会非非常的长,为了让大家阅读起来不那[……]

继续阅读

运维到底该学哪门编程语言?

运维到底该学那门编程语言?那么多脚本语言,学那个最好? 在多年以前我也经常问自己这些问题,为了找到答案,我几乎读完了中外所有的关于脚本语言之争的帖子和文章,最后我也没找到特别有说服力的的答案,因为在当时我已经有php了基础,python对我来说非常的陌生,如果转入python意味着我将要从自己的舒适区走出来,人性是懒惰的,人们为了说服自己,就要想从外界寻求答案,所以当时为这个问题也纠结了大半年,到最后我重新定位了自己的职业发展,是要做开发还是做运维?我的答案是运维,如果是运维,我觉得学习python是必然的选择,所以最终还是放弃了php,全身心投入的python学习中,从这件事可以看出,选择永[……]

继续阅读

python生成带特殊字符的密码

在日常运维中,如果涉及到用户管理,就一定会用到给用户设置密码的工作,其实吧,平时脑子里觉得设置个密码没什么,但要真让你随手敲一个12位带特殊字符的随机密码,也是很痛苦的事,如果让你敲10个这样的随机密码,我估计要人要疯了,所以这事不适合人干,但机器最做这个最拿手,今天我们就来学习一段python脚本,可以直接生成自己需要的密码,且密码长度,数字,字符个数随意你指定,废话不多说了,我们直接看代码:

脚本逐行解释,最开始几行导入了需要的模块,接下来定义一个mkpasswd的函数,函数的参数可以设置密码长度,数字、大写和小写字符的[……]

继续阅读

微软Excel (xlsx)转PDF实现

这个脚本是之前我之前处理数据的时候用过,主要作用是将excel转pdf文件,脚本是从网上找到的,我自己做了微调,为尊重原作者,源作者注释内容我做了保留,这个脚本唯一不足的是配置这个脚本的运行环境稍微复杂,不过不着急,我们先看脚本,稍后我们再看如让这个脚本运行起来:

脚本中A1:C9是定义你表格的数据范围,一般是左上到右下的范围,表示要转化这部分数据,如果你直接运行这个脚本,多半是运行不了,可以根据提示少什么模块就用 pip安装,这里重点说的是PDFWriter,你如果用pip安装,100%会报如下错误:

Could not[……]

继续阅读