2017-08-31 5 views
0

J'ai écris ce programme:Comment voir la sortie dans 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] ~]$ 

Mais je ne peux pas voir la sortie. Comment pourrais-je le voir? Je ne vois rien quand je l'exécute. Comment pourrais-je voir la sortie?

Répondre

1

Des pexpect docs:

Après chaque appel à expect() les propriétés before et after seront réglées sur le texte imprimé par application enfant. La propriété before contiendra tout le texte jusqu'au modèle de chaîne attendu. La chaîne after contiendra le texte correspondant au modèle attendu.

Ainsi, un print(child.before) dans des endroits stratégiques devrait répondre à vos besoins.

0

Vous pouvez également connecter la sortie de pexpect à un fichier journal:

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

Puis chaque réponse de sendline sera imprimé dans le journal

1

Selon le pexpect doc:

Les membres logfile_read et logfile_send peuvent être utilisés pour consigner séparément l'entrée de l'enfant et la sortie envoyée à l'enfant. Parfois, vous ne voulez pas voir tout ce que vous écrivez à l'enfant. Vous voulez seulement pour noter ce que l'enfant renvoie. Par exemple:

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

Vous devrez passer un codage pour frayer dans le code ci-dessus si vous utilisez Python 3.
Pour vous connecter séparément la sortie envoyée à l'utilisation d'enfants logfile_send:

child.logfile_send = fout 

Voir l'exemple suivant:

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