Python模块之pxssh(expect应用)

Expect 程序主要用于人机对话的模拟,就是那种系统提问,人来回答 yes/no ,或者账号登录输入用户名和密码等等的情况。因为这种情况特别多而且繁琐,所以很多语言都有各种自己的实现。

最初的第一个 Expect 是由 TCL 语言实现的,所以后来的 Expect 都大致参考了最初的用法和流程。

pexpect 是 Python 语言的类 Expect 实现。pxssh模块用于在python中ssh远程连接,执行命令,返回结果,但注意不支持Windows系统

例一

 1 #!/usr/bin/env python
 2  
 3 #-*- coding:utf-8 -*-
 4 
 5 from pexpect import pxssh
 6  
 7 host = "172.16.1.15"
 8 username = "root"
 9 password = "123456"
10 cmd1 = "ifconfig"
11 cmd2 = "uptime"
12  
13 try:
14     s = pxssh.pxssh()      #实例化一个对象
15     s.login(host,username,password)      #登录
16  
17     s.sendline(cmd1)       #执行命令
18     s.prompt()             #匹配cmd1执行后的下一步操作的命令提示符
19     print s.before         #输出命令提示符之前的内容
20  
21     s.sendline(cmd2)
22     s.prompt()             #s.prompt()按顺序匹配命令提示符,即如果注释上一个s.prompt(),这次会匹配cmd1执行后的命令提示符,s.before也只会输出cmd1返回的结果
23     print s.before         #s.before指的是两个命令提示符之间的内容,即如果注释上一个print s.before,这次也只会输出cmd2返回的结果,而不是cmd1+cmd2的内容
24  
25     s.logout()             #登出
26  
27 except :
28     print "pxssh failed on login."

 

例二

#!/usr/bin/python
#coding:utf-8

from pexpect.pxssh import pxssh


class SSH:
    def __init__(self):
        pass

    def connect(self, ip, user='root', password='zx123456'):
        self.ssh = pxssh()
        try:
            self.ssh.login(ip, user, password)
            return True
        except Exception as e:
            import sys
            print(sys.exc_info())
            return False
    def execute(self,command):
        CR = '\r\n'
        self.ssh.sendline(command) # 执行命令
        self.ssh.prompt() # 匹配command执行后的下一步操作的命令提示符
        # self.ssh.before 指的是两个命令提示符之间的内容
        data = (self.ssh.before).split(CR.encode('utf-8'))[1:-1]
        for each in data:
            print(each.decode('utf-8'))

 

>>> from ssh import SSH
>>> H1 = SSH()
>>> H1.connect('192.168.11.171')    # ssh连接到11.171
True
>>> H1.execute('pwd') # 在11.171上执行pwd命令
/root

 

posted @ 2021-11-17 10:26  超级宝宝11  阅读(836)  评论(0编辑  收藏  举报