2017-08-31 6 views
0

Ich habe dieses Programm schreiben:Wie sieht man die Ausgabe in 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] ~]$ 

Aber ich den Ausgang nicht sehen kann. Wie könnte ich es sehen? Ich sehe nichts, wenn ich es ausführe. Wie könnte ich die Ausgabe sehen?

Antwort

1

Aus der pexpect docs:

Nach jedem Aufruf expect() die before und after Eigenschaften an den vom Kind Anwendung gedruckten Text eingestellt werden. Die Eigenschaft before enthält den gesamten Text bis zum erwarteten Zeichenfolgenmuster. Die Zeichenfolge after enthält den Text, der dem erwarteten Muster entsprach.

Also, ein print(child.before) in strategischen Orten sollte Ihren Bedarf erfüllen.

0

Sie auch die Ausgabe von pexpect in eine Protokolldatei anmelden können:

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

Dann ist jede Antwort von sendline wird in das Protokoll gedruckt werden

1

Nach dem pexpect doc:

Die logfile_read und logfile_send Mitglieder können verwendet werden, um die Eingabe von der untergeordneten und Ausgabe, die an das Kind gesendet wird, getrennt zu protokollieren. Manchmal möchten Sie nicht alles sehen, was Sie dem Kind schreiben. Sie möchten nur protokollieren, was das Kind zurücksendet. Zum Beispiel:

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

Sie müssen eine Codierung passieren in dem obigen Code, um laichen, wenn Sie Python verwenden 3.
Gesondert Ausgabe an das Kind logfile_send gesendet log verwenden:

child.logfile_send = fout 

Siehe folgendes Beispiel:

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