我正在尝试使用python类,下面是我的第一个python类代码:
import re
import time
import paramiko
hostname = "10.1.1.1"
net_username = "user"
net_password = "password"
class asr_qa:
def __init__(self, hostname, net_username, net_password):
''' SSH connection Establish '''
self.remote_conn_pre = paramiko.SSHClient()
self.remote_conn_pre.set_missing_host_key_policy(
paramiko.AutoAddPolicy())
self.remote_conn_pre.connect(hostname, username=net_username,
password=net_password,look_for_keys=False, allow_agent=False)
self.remote_conn = remote_conn_pre.invoke_shell()
buff = ''
while not buff.endswith('#'):
resp = remote_conn.recv(9999)
buff += resp
print(resp)
def __disconnect__(self):
self.remote.close()
def __send_command__(self, cmd):
remote_conn.send(self.cmd)
asr = asr_qa(hostname, net_username, net_password)
asr.__send_command__("ping 10.10.10.10\n")
print asr.resp
asr.__disconnect__()
我收到以下错误:
Traceback (most recent call last):
File "test.py", line 30, in <module>
asr = asr_qa(hostname, net_username, net_password)
File "test.py", line 18, in __init__
self.remote_conn = remote_conn_pre.invoke_shell()
NameError: global name 'remote_conn_pre' is not defined
请让我知道我做错了什么。
并且我也尝试阅读许多文档,但我没有正确理解__init__
究竟会做什么。
__init__
是类的构造函数。当我们调用类时,它初始化__init__
下的所有值(只要该类的新对象被实例化,就会调用此特殊函数),为什么我们不能直接定义__init__
值来自行运行?
我们应该使用__init__
答案 0 :(得分:0)
您定义了self.remote_conn_pre,但稍后您调用了remote_conn_pre。 remote_conn_pre与self.remote_conn_pre。
不同改变这个:
self.remote_conn = remote_conn_pre.invoke_shell()
对此:
self.remote_conn = self.remote_conn_pre.invoke_shell()
您必须在代码的其他位置进行类似的更改,例如在self.
之前添加remote_conn.recv(9999)
答案 1 :(得分:0)
好像你忘了把self
放进去了:
self.remote_conn = remote_conn_pre.invoke_shell()
应该在哪里:
self.remote_conn = self.remote_conn_pre.invoke_shell()