《Docker教程七》docke里的镜像用python的pexpect连接GNS3

使用pexpect包的ssh来连接交换机,使用show/display命令来返回交换机输出结果。

一、首先明确一点,GNS3里面的虚拟设备可以直接telnet连接。GNS3默认使用的地址是127.0.0.1,端口号从5000开始,每多一个设备端口号对应+1。
而windows默认用的是192.168.99.1 5000连接到docker里的镜像,所以:
c = pexpect.spawn(‘telnet 192.168.99.1 5000’)
即可telnet连接到GNS3里的设备

二、安装Telnet服务
(一)windows平台
1、打开控制面板
2、程序
3、启用或关闭Windows功能
4、选择选项“Telnet客户端”,确定
5、测试:打开CMD窗口,输入telnet,若出现“Microsoft Telnet>”则表示telnet开启成功
6、测试2:若已有telnet的服务器开启,打开CMD窗口,输入例如:telnet 127.0.0.1 5000
(二)Linux平台
这里是Centos,使用命令:yum install telnet

三、系统批量运维管理器pexpect
pexpect是Linux下的expect的python封装,可以实现ssh、ftp、passwd、telnet等命令行进行自动交互。从官网(http://pexpect.readthedocs.io)可知,从版本4.0开始,pexpect支持在windows上使用。
1、pexpect的安装
windows平台:打开CMD,输入命令:pip install pexpect
Linux(Centos)平台:pip install pexpect
2、spawn类
spawn是pexpect的主要类接口,功能是启动和控制子应用程序。
pexpect.spawn(command, args[], timeout=30, maxread=2000, searchwindowsize=None, logfile=None, cwd=None, env=None, ignore_sighup=True)
① command:任意已知的系统命令
child = pexpect.spawn(‘/usr/bin/ftp’) #启动ftp客户端命令
child = pexpect.spawn(‘/usr/bin/ssh user@example.com’) #启动ssh
child = pexpect.spawn(‘ls -latr /tmp’) #运行ls显示/tmp目录内容命令
② args=[]:当子程序需要参数,使用python列表来代替参数项
child = pexpect.spawn(‘/usr/bin/ftp’, [])
child = pexpect.spawn(‘/usr/bin/ssh’, [‘user@example.com’])
child = pexpect.spawn(‘ls’, [‘-latr’, ‘/tmp’])
③ timeout:等待结果的超时时间
④ maxread:pexpect从终端控制台一次读取的最大字节数
⑤ searchwindowsize:匹配缓冲区字符串的位置,默认是从开始位置匹配
⑥ 注意:pexpect不会解析shell命令的元字符重定向“>”、管道“|”、通配符“*”。存在这三个特殊字符的命令作为/bin/bash的参数进行调用
child = pexpect.spawn(‘/bin/bash -c “ls -l | grep LOG > logs.txt”’)
child.expect(pexpect.EOF)
使用python列表的形式:
shell_cmd = ‘ls -l | grep LOG > logs.txt’
child = pexpect.spawn(‘/bin/bash’, [‘-c’, shell_cmd])
child.expect(pexpect.EOF)
⑦ 获取pexpect的输入输出信息
1)写到日志文件:
child = pexpect.spawn(‘some_command’)
fout = file(‘mylog.txt’, ‘w’)
child.logfile = fout
2)输出到标准输出
child = pexpect.spawn(‘some_command’)
child.logfile = sys.stdout
expect方法:定义了一个子程序输出的匹配规则
expect(pattern, timeout=-1, searchwindowsize=-1)
① pattern表示字符串、pexpect.EOF(指向缓冲区尾部,无匹配项)、pexpect.TIMEOUT(匹配等待超时)、正则表达式或者前面四种类型组成的列表(List)。
② timeout指定等待匹配结果的超时时间,单位为秒。
③ searchwindowsize匹配缓冲区字符串的位置,默认从开始位置匹配。
④ 注意:列表的情况下,返回的是最左边的元素的索引ID。
⑤ expect方法的两个成员:
1)before:保存了最近匹配成功之前的内容
2)after:保存了最近匹配成功之后的内容
⑥read方法:代替了标准输入键盘
1)send(self, s) 发送命令,不回车
2)sendline(self, s=’’) 发送命令,回车
3)sendcontrol(self, char) 发送控制字符,如child.sendcontrol(‘c’)等价于ctrl+c
4)sendeof() 发送eof

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值