2017-08-31 168 views
0

我写这个程序:如何在pexpect中查看输出?

[[email protected] ~]$ cat ftp.py 
#!/usr/bin/env python 

# This connects to the rediris ftp site 
# 
import pexpect 
child = pexpect.spawn('ftp ftp.rediris.es') 

child.expect('Name .*: ') 
child.sendline('anonymous') 
child.expect('ftp> ') 
child.sendline('[email protected]') 
child.expect('ftp> ') 
child.sendline('lcd /tmp') 
child.expect('ftp> ') 
child.sendline('pwd') 
child.expect('ftp> ') 
child.sendline('bye') 

[[email protected] ~]$ ./ftp.py 
[[email protected] ~]$ 
[[email protected] ~]$ 
[[email protected] ~]$ 

但我不能看到输出。我怎么能看到它?我执行它时看不到任何东西。我怎么能看到输出?

回答

1

从Pexpect的文档:

expect()beforeafter属性将被设置为子应用程序打印的文本每次通话后。 before属性将包含所有文本,直到预期的字符串模式。 after字符串将包含与预期模式匹配的文本。

因此,战略地点的print(child.before)应满足您的需求。

0

您也可以Pexpect的输出记录到日志文件:

child.logfile = open("/tmp/mylog", "w") 

然后sendline一个应答将被打印到日志

1

按照pexpect doc

logfile_readlogfile_send构件可以用来分别登录从孩子和 输出发送到子输入。有时你不想看到你给孩子写的所有内容。您只需要 即可记录孩子发回的内容。例如:

child = pexpect.spawn('some_command') 
child.logfile_read = sys.stdout 

你需要,如果你正在使用Python 3
要单独记录发送到子输出通过编码在上面的代码中产卵使用logfile_send

child.logfile_send = fout 

请参阅以下示例:

[STEP 105] # cat foo.py 
import pexpect, sys 

re_PS1 = 'bash-[.0-9]+[$#] $' 

proc = pexpect.spawn('bash --norc') 
if len(sys.argv) != 1: 
    proc.logfile_read = sys.stdout 

proc.expect(re_PS1) 

proc.sendline("echo hello world") 
proc.expect(re_PS1) 

proc.sendline('exit') 
proc.expect(pexpect.EOF) 
proc.close() 
[STEP 106] # python foo.py 
[STEP 107] # python foo.py foo 
bash-4.4# echo hello world 
hello world 
bash-4.4# exit 
exit 
[STEP 108] #