la lecture de la sortie de pexpect sendline
J'ai pexpect de travail, mais je vais avoir des problèmes d'impression à la sortie arrière. Dans mon script de test ci-dessous, il crée la connexion ssh, puis envoie un sudo su -, puis mon mot de passe, puis envoie une ligne qui aurait besoin de sudo accès à le faire (j'ai aussi ajouté p.interagir() à quelques reprises pour s'assurer qu'il est à la racine). Le problème que j'ai, avec le retour de la sortie des commandes que je ne. À la fin, je suis désireux de s'exécuter quelques commandes, et certains du-h, et d'autres(beaucoup plus complexe) de l'espace des commandes. Mais actuellement, quand il essaie d'imprimer les p.avant, j'obtiens:
Traceback (most recent call last):
File "./ssh.py", line 37, in <module>
print p.before()
TypeError: 'str' object is not callable
Voici le script que je suis en train de travailler à partir de(édité à retirer mon pass et tel)
#!/usr/bin/env python
import pexpect
import struct, fcntl, os, sys, signal
def sigwinch_passthrough (sig, data):
# Check for buggy platforms (see pexpect.setwinsize()).
if 'TIOCGWINSZ' in dir(termios):
TIOCGWINSZ = termios.TIOCGWINSZ
else:
TIOCGWINSZ = 1074295912 # assume
s = struct.pack ("HHHH", 0, 0, 0, 0)
a = struct.unpack ('HHHH', fcntl.ioctl(sys.stdout.fileno(), TIOCGWINSZ , s))
global global_pexpect_instance
global_pexpect_instance.setwinsize(a[0],a[1])
ssh_newkey = 'Are you sure you want to continue connecting'
p=pexpect.spawn('ssh user@localhost')
i=p.expect([ssh_newkey,'password:',pexpect.EOF,pexpect.TIMEOUT],1)
if i==0:
print "I say yes"
p.sendline('yes')
i=p.expect([ssh_newkey,'password:',pexpect.EOF])
if i==1:
print "I give password",
p.sendline("mypassword")
elif i==2:
print "I either got key or connection timeout"
pass
elif i==3: #timeout
pass
global global_pexpect_instance
global_pexpect_instance = p
p.sendline("sudo su -")
p.sendline("mypasswd")
p.sendline("mkdir /home/user/test")
print p.before
Je dois me détacher de ce lien: http://linux.byexamples.com/archives/346/python-how-to-access-ssh-with-pexpect/
Toute aide est très appréciée.
EDIT: Comme Armin Rigo a souligné ci-dessous. J'en appelle à p.avant comme une fonction comme p.avant(). Erreur stupide de ma part, que c'est ce qui explique pourquoi j'ai été faire cette erreur aujourd'hui et pas hier quand j'ai essayé ce. Après avoir fait ce changement à mon script, et en modifiant la ligne de commande envoyée, imprimer p.avant, et aucune sortie n'est retourné. D'autres moyens de retourner le résultat d'une sendline() la commande?
p.before
est un attribut de chaîne, pas une méthode à appeler.
OriginalL'auteur cashman04 | 2013-03-09
Vous devez vous connecter pour publier un commentaire.
Utiliser des fichiers de log, qui logfile est de stocker toutes les données de sortie dans le terminal.utilisez l'exemple de code:-
ouvrez le fichier journal et de tout voir dans les terminaux de l'événement
OriginalL'auteur Reegan Miranda
Pour aller chercher de la production complète après sendline utilisation enfant.read()
par exemple
OriginalL'auteur IRSHAD