您可以使用class method为pexpect
的实例(子)连接并设置class variable。然后在这个类的实例方法可以使用类变量
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
在实例方法中使用的self.ssh
是使用类变量的类里面,如果没有分配到的方式。如果将它分配给它,则会创建一个具有相同名称的实例变量。在这种情况下,由于没有理由在本课中分配给ssh
,所以这种情况不会发生。
类方法接收该类作为隐式参数,因此可以使用cls.ssh
。内部的实例方法一个还可以得到对类的引用,然后使用cls.ssh
def cmd(self, command):
cls = self.__class__
cls.ssh.sendline(command)
...
类变量可以在任何地方用作Comms.ssh
。这是一个相当枯燥的课程。
现在使用类方法连接到主机,并通过不同的实例
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()
在[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] >
删节什么印刷品,对于个人信息的连接应建立和输出运行命令处理得更好,但这大约是pexpect
。
对于类/静态方法和变量见,例如
所以我想代码工作,你只需要锻炼一个会话策略? –
是的,它的工作,但我需要能够打开所有对象的一个pexpect连接。 – MRM