文章目录
说明
文档参考(翻译)自官方文档(地址),加入了一些我在使用过程中的心得体会。简略了我认为不重要的内容。简略了我不懂的内容。水平有限,仅供参考。
API结构
- Core pexpect components(核心组件)
- spawn class
- run function
- Exceptions
- Utility functions(小工具)
- fdpexpect - use pexpect with a file descriptor
- fdspawn class
- popen_spawn - use pexpect with a piped subprocess
- PopenSpawn class
- replwrap - Control read-eval-print-loops
- pxssh - control an SSH session
- pxssh class
核心组件
pexpect有两个主要接口:函数run()和类spawn。类spawn更强大。run()比spawn类简单,适合快速调用程序。当调用run()时,它执行给定的程序,然后返回输出。这是对os.system()的一个方便的替换。
例如:
pexpect.run('ls-la')
spawn类是到pexpect系统的更强大的接口。您可以使用它来产生一个子程序,然后通过发送输入和期望响应(等待子程序输出中的模式)与它进行交互。
child = pexpect.spawn('scp foo [email protected]:.')
child.expect('Password:')//会阻塞,直到匹配到指定内容。
child.sendline(mypassword)
创建Spawn
构造方法
class pexpect.spawn(command, args=[], timeout=30, maxread=2000, searchwindowsize=None, logfile=None, cwd=None, env=None, ignore_sighup=False, echo=True, preexec_fn=None, encoding=None, codec_errors='strict', dimensions=None, use_poll=False)
创建spawn举例:
child = pexpect.spawn('/usr/bin/ftp')
child = pexpect.spawn('/usr/bin/ssh [email protected]')
child = pexpect.spawn('ls -latr /tmp')
也可以这样:
child = pexpect.spawn('/usr/bin/ftp', [])
child = pexpect.spawn('/usr/bin/ssh', ['[email protected]'])
child = pexpect.spawn('ls', ['-latr', '/tmp'])
args
args=[]
是命令的参数。也可以直接写在命令里面
注意,pexpect不解释shell元字符,例如重定向、管道或通配符(>、或*)。这是一个常见的错误。如果想运行一个命令并通过管道通过发送给另一个命令,那么还必须启动一个shell。例如:
child = pexpect.spawn('/bin/bash -c "ls -l | grep LOG > logs.txt"')
child.expect(pexpect.EOF)
第二种形式的spawn(传递参数列表args
)可以使语法更加清晰。例如,以下内容与前一个示例等效:
shell_cmd = 'ls -l | grep LOG > logs.txt'
child