Skip to main content
 首页 » 编程设计

python之如何在预期中看到输出

2025年05月04日14xing901022

我写了这个程序:

[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 ~]$  

但是我看不到输出。我怎么会看到它?我执行它时什么也看不到。我怎样才能看到输出?

请您参考如下方法:

根据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  

请看下面的例子:

[STEP 105] # cat foo.py 
import pexpect, sys 
 
re_PS1 = 'bash-[.0-9]+[$#] $' 
 
proc = pexpect.spawn('bash --norc') 
if len(sys.argv) != 1: 
    if sys.version_info[0] < 3: 
        proc.logfile_read = sys.stdout 
    else: 
        proc.logfile_read = sys.stdout.buffer 
 
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] #