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?

Le message d'erreur nous indique que p.before est un attribut de chaîne, pas une méthode à appeler.

OriginalL'auteur cashman04 | 2013-03-09