2012-08-23 1 views
2

En python pexpect, je veux filtrer le oupt. Par exemple, dans le code ci-dessous, je veux seulement que la date soit imprimée.Comment filtrer la sortie de pexpect

#!/usr/bin/env python 
import pexpect,time 
p=pexpect.spawn('ssh [email protected]') 
p.expect('Password:') 
p.sendline('mypassword') 
time.sleep(2) 
p.sendline('date') 
p.expect('IST') 
current_date = p.before 
print 'the current date in remote server is: %s' % current_date 

sortie actuelle:

the current date in remote server is: 
Last login: Thu Aug 23 22:58:02 2012 from solaris3 
Sun Microsystems Inc. SunOS 5.10  Generic January 2005 
You have new mail. 
welcome 
-bash-3.00$ date 
Thu Aug 23 23:03:10 

Sortie prévue:

the current date in remote server is: Thu Aug 23 23:03:10 

Répondre

2

before vous donnera tout depuis l'appel expect précédent.

Vous pouvez diviser la sortie sur newline:

current_date = p.before.split('\n')[-1] 

Cependant, il serait préférable d'attendre l'invite au lieu de 2 secondes de sommeil:

p.sendline('mypassword') 
p.expect('[#\$] ') 
p.sendline('date') 
+0

ecatmur: Ce fut une belle solution. Merci également de pointer une solution pour attendre l'invite. – Arun

Questions connexes