• Python学习——pexpect


    Pexpect主要用于ssh远程登录,远程管理等。

    http://pexpect.sourceforge.net/pexpect.html#spawn-expect

    简单举例,防止忘记

     1 #!/usr/bin/env python
     2 import pexpect
     3 
     4 child = pexpect.spawn("ssh root@192.168.0.1")
     5 fout = open('/root/lwt/mylog.log','a')
     6 child.logfile = fout
     7 index = child.expect(["[Pp]assword:",pexpect.EOF])
     8 if index == 0:
     9     child.sendline("NextGen")
    10     child.expect("]#")
    11     child.sendline("ls -l")
    12     child.expect("]#")
    13 else:
    14     print "Error!"
    15 return

    logfile:指定logfile,记录操作过程中的输入输出信息;如果只记录输入信息,用log_read;如果只记录输出信息,用log_send;

    import pexpect
    p = pexpect.spawn( ‘ ls -l ’ )
    fout = open ('log.txt', "w")
    p.logfile = fout
    p.expect(pexpect.EOF) #read_nonblocking以后才会写入文件 fout.close()
    • 调用 send 后,才会往 logfile 和 logfile_send 中写入,sendline/sendcontrol/sendoff/write/writeline 最终都会调用 send,所以 sendline 后 logfile 中一定有内容了,只要此时 logfile 没有被 close 。
    • 调用 read_nonblocking 后,才会往 logfile 和 logfile_read 中写入,expect_loop 会调用 read_nonblocking,而 expect_exact 和 expect_list 都会调用 expect_loop,expect 会调用 expect_list,所以 expect 后 logfile 中一定有内容了,只要此时 logfile 没有被 close 。

    expect:expect可以是一个list

    expect在流中匹配,直到匹配到一个模板,如果pattern是list,返回match的index,如果pattern不是list,返回0表示匹配成功,为了避免EOF和TIMEOUT,将其加入pattern的list。

      # the input is 'foobar'
      index = p.expect (['bar', 'foo', 'foobar'])
      # returns 1 ('foo') even though 'foobar' is a "better" match

      index = p.expect (['foobar', 'foo'])
      # returns 0 ('foobar') if all input is available at once,
      # but returs 1 ('foo') if parts of the final 'bar' arrive late

    sendline:和send不同,sendline会额外发送一个回车

  • 相关阅读:
    单例设计模式
    HashMap 排序
    代理、动态代理
    冒泡排序 、二分查找、快速排序
    Azure powershell 订阅登录管理
    cmdbuild -2.4.3 在Centos7部署
    Zabbix3.0 安装部署
    nginx 一键安装
    通过菜单一键安装mysql
    Rsync同步工具
  • 原文地址:https://www.cnblogs.com/DaLiNDluDlu/p/5250560.html
Copyright © 2020-2023  润新知