How to see the output in pexpect?

匿名 (未验证) 提交于 2019-12-03 01:08:02

问题:

I have write this program:

[mik@mikypc ~]$ 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('noah@example.com')  child.expect('ftp> ')  child.sendline('lcd /tmp')  child.expect('ftp> ')  child.sendline('pwd')  child.expect('ftp> ')  child.sendline('bye')  [mik@mikypc ~]$ ./ftp.py  [mik@mikypc ~]$  [mik@mikypc ~]$  [mik@mikypc ~]$  

But I cannot see the output. How could I see it?. I don't see anything when I execute it. How could I see the output?.

回答1:

From the pexpect docs:

After each call to expect() the before and after properties will be set to the text printed by child application. The before property will contain all text up to the expected string pattern. The after string will contain the text that was matched by the expected pattern.

So, a print(child.before) in strategic places should fulfill your need.



回答2:

According to the pexpect doc:

The logfile_read and logfile_send members can be used to separately log the input from the child and output sent to the child. Sometimes you don’t want to see everything you write to the child. You only want to log what the child sends back. For example:

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

You will need to pass an encoding to spawn in the above code if you are using Python 3.
To separately log output sent to the child use logfile_send:

child.logfile_send = fout  

See following example:

[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] # 


回答3:

You can also log the output of pexpect to a log file:

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

Then every response of sendline will be printed to the log



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!