前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python pexpect 模块

python pexpect 模块

作者头像
py3study
发布2020-01-06 15:09:37
9040
发布2020-01-06 15:09:37
举报
文章被收录于专栏:python3

Pexpect 模块

两个主要接口

pexpect.run('ls -la')

child = pexpect.spawn('scp foo myname@host.example.com:.')

        child.expect ('Password:')

        ##在这个地方会阻塞,直到出现password或者超时推出

        child.sendline (mypassword)

管道符的特殊处理

shell_cmd = 'ls -l | grep LOG > log_list.txt'

               child = pexpect.spawn('/bin/bash', ['-c', shell_cmd])

               child.expect(pexpect.EOF) #等待断开

将log日志重定向到某个文件或者标准输出

fout = open('filename','w+')

child.logfile = fout

child.logfile = sys.stdout

fout.close()

如果是仅仅看child返回的信息,而不看你写给child的信息,那么

child.logfile_read = sys.stdout

写给child的信息则是

child.logfile_send = sys.stdout

    try:

        child.sendline('ls -l')

        child.expect(pexpect.EOF)

        #child.prompt()

        print child.before

    except:

expect不断的读入缓冲区内容等待匹配结束,before代表匹配前的内容,即ls的执行结果,after代表匹配之后的内容

child.before child.buffer                   

代码语言:javascript
复制
try:     index = pexpect (['good', 'bad'])         if index == 0:             do_something()         elif index == 1:             do_something_else()     except EOF:         do_some_other_thing() except TIMEOUT:     do_something_completely_different()  

另外在pexpect中,有一个很好用的接口,就是sendcontrol(),比如说sendcontrol('c'),向目标机器发送一个中断符号,主要用在前面的命令执行时间过长,退出当前命令,并使当前命令对后续命令没有影响,比如说expect('~#', 3),此时发生了超时,后续再发送命令,可能那个超时的命令的结果还将输出,就会对当前的结果有影响,发送sendcontrol('c'),则好的多,再expect()一下就ok啦

sendeof(),只能用在开头处,另外对于某些平台是发送ctrl+d命令,所以还是不是很好用

参考文献:

http://www.ibm.com/developerworks/cn/linux/l-cn-pexpect1/

http://www.ibm.com/developerworks/cn/linux/l-cn-pexpect2/

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/09/16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档