zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    android打包so文件到apk
    source build/envsetup.sh 之后
    android 应用程序 集合
    dedecms模块支持系统标签
    php中的两个DI解决方案
    yii快速入门与参考
    [ZT] 使用PHPFPM (PHP FastCGI Process Manager)来对phpcgi进程进行管理
    [转]VLD扩展使用指南
    织梦CMS安装路径问题
    php+mysql中存储过程性能简单比较
  • 原文地址:https://www.cnblogs.com/superbaby11/p/15566046.html
Copyright © 2011-2022 走看看