Linux 下Python 脚本编写的"奇技淫巧"

Linux 下Python 脚本编写的"奇技淫巧",第1张

详细的内容可以参考下面的参考文档,下面的内容主要是为网络设备运维人员使用的pexpect 跨平台简明教程。

Expect 程序主要用于人机对话的模拟,就是那种系统提问,人来回答 yes/no ,或者账号登录输入用户名和密码等等的情况。

pexpect是 Don Libes 的 Expect 语言的一个 Python 实现,是一个用来启动子程序,并使用正则表达式对程序输出做出特定响应,以此实现与其自动交互的 Python 模块。它可以用来实现与ssh, ftp, telnet等程序的自动交互。

send命令后执行结果内容保存在buffer中,这时childexpect('keyword')后,childbefore即为“keyword”之前的字符串,childafter即为匹配的”keyword”字符串。

command的执行结果都保存在一个buffer中,每次执行expect时都从buffer中开始检查匹配的pattern,如果找到了匹配的pattern,则所有在匹配处之前的内容都从buffer中清除。

(这边没有看明白也没有关系,可以看后面的实践篇例子)

通常维护人员有的偏向于用WIN系统,有的偏向于LINUX系统。所以前期团队希望形成一个统一框架的时候就出现了一个难题。框架如何适用于不同的系统。

LInux系统pexpect包,win系统前期尝试使用winpexpect,但是程序改动很大,并没有调试成功。

如何在WIN系统使用python的pexpect包很难找到相关资料,某乎上都是类似的疑问没有解答。

团队成员增加后,终于有了新的思路 , 团结就是力量 。

通过这个模块进行不同系统的适配。

将plinkexe装在python的文件夹在python的安装目录下,win系统可以同样使用pexpect模块

参考信息1:Pexpect 官方文档 New in version 40: Windows support。Pexpect can be used on Windows to wait for a pattern to be produced by a child process, using [ pexpectpopen_spawnPopenSpawn ]

参考信息2:PuTTY是一个Telnet、SSH、rlogin、纯TCP以及串行接口连接软件。plink是可以独立使用的exe实现形式,可以让我们直接在命令行制定好命令,然后执行,完成后自动关闭session。ssh是一个安全通道协议。plink是这个通道协议的一个实现 [上传中(-572001-1587612890428-0)]

从官方文档来看,

sendline() 和 send() 唯一的区别就是在发送的字符串后面加上了回车换行符,这也使它们用在了不同的地方:

只需要发送字符就可以的话用send()

如果发送字符后还要回车的话,就用 sendline()

但是在调测过程中,WIN系统下命令输入后,childbefore始终得不到预想中的结果。

经过逐步排查,发现在WIN系统下只能使用send() ,如果使用sendline() ,第一次交互没有问题,后续交互就开始问题。

WIN系统下childbefore输出为b'byte型,做判断时要转为str型。具体可以参考最后面一篇讲编码类型的文章,讲的很详细。

例子1

send Username后,childbefore一直到'Tac_Userna',childafter为‘me:’,childbuffer为空。

expect关键字assword:后,childbefore回显一直到keyword之前,childafter为keyword,childbuffer为空。

例子2

下发command命令,childbefore维持原来的不变,expect到keyword以后,childbefore变为下发command命令后的设备回显。

参考文档

官方文档

探索Pexpect

Pexpect示例及使用Tips

Python Pexpect模块讲解

Pexpect模块使用说明

windows下使用plink实现全自动登陆ssh

Python3_字符编码

假设从主机A,检查主机B上的进程,

需要在主机B上建立检查用户,例如叫x,

并设置通过public key认证登录SSH,不会可以google搜一下,

然后,在A机器上执行:

ssh x@B ~/commandsh > resulttxt

commandsh就是B机器上放置在x目录下的脚本。

输出结果应该是写到了resulttxt

或者另一种写法

result=`ssh x@B ~/commandsh`

结果直接保存到result变量中了。

暂时没有linux环境,所以没有实际测试,你自己试试吧

以上就是关于Linux 下Python 脚本编写的"奇技淫巧"全部的内容,包括:Linux 下Python 脚本编写的"奇技淫巧"、如何Python3.4使用pexpect来实现SSH登陆、python 运维常用脚本等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/web/10140471.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存