2013-10-17 3 views
1

J'ai un script dans lequel je crée un objet spawn à l'aide de pexpect.Python Pexpect objet spawn Flush

Le code ressemble à ceci:

self.rshcmd='rsh 192.X.X.X' 
self.pipe1 = pexpect.spawn(command=self.rshcmd, logfile=sys.stdout,maxread=512) 

Maintenant après que je reçois dans cela, je pense à l'invite que je reçois est >

Et maintenant, je deviens su en envoyant su et donner le mot de passe . Maintenant, mon message comme prévu devient #

J'ai un routeur connecté à ce PC donné naissance (192.X.X.X) qui est 192.168.1.1

Je telnet dans ce routeur en envoyant telnet 192.168.1.1. Après que je me sois fait de ce routeur, je veux sortir de la session Telnet.

Donc, j'envoie exit et attendez # car je reviendrai à la racine du PC engendré. Mais ce que je vois c'est que je reçois < comme invite.

Donc, d'une manière ou d'une autre, il envoie deux fois "exit". L'un me sort de telnet et l'autre me sort de la racine. Je pense que le tuyau n'est pas vidé et nous recevons de vieilles commandes empilées.

Y at-il un moyen que je peux vider toutes les anciennes commandes dans le tuyau?

De la documentation, il est une fonction de chasse, mais il semble ne rien faire:

flush(self) 
    This does nothing. It is here to support the interface for a 
    File-like object. 
+0

pexpect n'envoie pas les commandes deux fois. La connexion Telnet peut-elle se fermer avant d'envoyer 'exit'? –

Répondre

1

Do

child.send(cmd) 
child.pexpect(cmd) 
child.send('\n') 

au lieu de

child.sendline(cmd) 

Cela permettra de résoudre votre problème. (mais lors de l'envoi du mot de passe child.sendline (passwrd))

Questions connexes