使用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">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