Vous pouvez utiliser un class method pour vous connecter et définir un class variable pour l'instance pexpect
(enfant). Ensuite, les méthodes d'instance de cette classe peuvent utiliser cette variable classe
import pexpect
class Comms:
Is_connected = False
Name = None
ssh = None
@classmethod
def connect(cls, name):
cls.Name = name
cls.ssh = pexpect.spawn('ssh ' + name)
cls.ssh.expect('password:')
cls.ssh.sendline('*****')
cls.ssh.expect('> ')
print cls.ssh.before, cls.ssh.after
cls.Is_connected = True
@classmethod
def close(cls):
cls.ssh.close()
cls.ssh, cls.Is_connected = None, False
def check_conn(self):
print self.Name + ' is ' + str(self.Is_connected)
return self.Is_connected
def cmd(self, command):
self.ssh.sendline(command)
self.ssh.expect('> ')
return self.ssh.before + self.ssh.after
Le self.ssh
utilisé dans les méthodes d'instance est un moyen d'utiliser une variable de classe à l'intérieur de la classe, si elle est pas affecté à. Si elle était affectée à cela, créer une variable d'instance avec le même nom. Dans ce cas, cela ne peut pas arriver car il n'y a aucune raison d'assigner ssh
dans cette classe.
Une méthode de classe reçoit la classe en tant qu'argument implicite, de sorte que cls.ssh
peut être utilisée. A l'intérieur d'une méthode d'instance, on peut également obtenir une référence à la classe, puis utiliser cls.ssh
def cmd(self, command):
cls = self.__class__
cls.ssh.sendline(command)
...
Une variable de classe peut être utilisée partout comme Comms.ssh
. C'est une classe plutôt dénudée.
Maintenant vous connecter à un hôte en utilisant la méthode de classe et d'exécuter des commandes par différentes instances
from comms import Comms
userathost = '[email protected]'
print 'Connect to ' + userathost
Comms.connect(userathost)
conn_1 = Comms()
conn_1.check_conn()
print conn_1.cmd('whoami')
print
conn_2 = Comms()
print 'With another instance object: pwd:'
print conn_2.cmd('pwd')
Comms.close()
ce impressions, expurgée de données personnelles dans [description]
Connect to [email protected]
Last login: Sat Aug 12 01:04:52 2017 from *****
[... typical greeting on this host]
[my prompt] >
[email protected] is True
whoami
[my username]
[my prompt] >
With another instance object: pwd:
pwd
[path to my home]
[my prompt] >
La connexion doit être mis en place et la sortie traité plus gentiment, mais c'est à peu près pexpect
.
Pour les méthodes de classe/statiques et des variables voir, par exemple
Je suppose que le code fonctionne, il vous suffit de séance d'entraînement d'une stratégie unique de la session? –
Oui, ça marche mais j'avais besoin de pouvoir ouvrir une connexion pexpect pour tous les objets. – MRM