美文网首页
2019-12-13 pexpect,文档

2019-12-13 pexpect,文档

作者: 测序九月 | 来源:发表于2019-12-13 19:41 被阅读0次

    官网地址:https://pexpect.readthedocs.io/en/stable/api/pexpect.html

    首先expect能用的,pexpect都可以用。
    chile = pexpect.spawn()

    1、需要注意的点,expect是流处理
    chile.expect("\r\n") 可以匹配到结尾,不支持$,单独的\n, \r都是不能准确匹配的。

    2、expect是非贪婪匹配
    \d+的匹配配,想写贪婪,官方的说法是可以使用\d+\D

    3、pexpect.spawn()中不支持> | *的,
    如果想支持,可以用bash启动,/bin/bash -c "commend"
    child = pexpect.spawn('/bin/bash -c "ls -l | grep LOG > logs.txt"')

    4、pexpect日志输入到文件,或者可以输出到屏幕
    child = pexpect.spawn('some_command')
    fout = open('mylog.txt','wb')
    child.logfile = fout #替换句柄
    child.logfile = sys.stdout #

    5、期望输入完成输入内容
    p = pexpect.spawn('/bin/ls')
    p.expect(pexpect.EOF)
    print p.before

    6、expect输入是list时会返回匹配到的index
    index = p.expect(['good', 'bad', pexpect.EOF, pexpect.TIMEOUT])

    7、expect默认编译正则,如果我想纯字符匹配,可以尝试expect_exact()

    8、expect每次都有编译,如果我需要重复很多次,则速度会非常慢,这时可以考虑expect_list()
    每次都调用已编译的正则,编译的方法可以使用compile_pattern_list()。
    eg:
    cpl = self.compile_pattern_list(my_pattern)
    while some_condition:
    ...
    i = self.expect_list(cpl, timeout)
    ...

    9、send()传递的字符默认最大为256,如果需要传递更多,在启用是bash启用
    bash = pexpect.spawn('/bin/bash', echo=False)

    10、send,write,sendline,writelines,
    send需要加\n才被执行,sendline则不用,write同sendline,只是没有返回值。writelines可以输入可迭代的元素

    11、expect作为交互程序,必然有很多ctrol,这时可以使用sendcontrol()
    child.sendcontrol('g') #相当于按下ctrl + G

    同理sendintr() #发送中断信号 and sendeof() #发送eof,需要用户做的是记得加eof开头

    12、读取获得的内容read(size),readline()
    需要注意的是,readline会以\r\n做结束行

    相关文章

      网友评论

          本文标题:2019-12-13 pexpect,文档

          本文链接:https://www.haomeiwen.com/subject/nuqqnctx.html