我正在使用flask-socketio构建一个web-telnet。在我将telnet类对象添加到我的本地网络中的另一个设备之前,它工作得很好。有人知道如何解决这个问题吗?
在这里我的代码:
import telnetlib
from flask_socketio import SocketIO, emit
app = Flask(__name__)
socketio = SocketIO(app)
@socketio.on('check_device')
def check(ip_add):
device = telnet_device(ip_add)
device.connect()
class telnet_device():
def __init__(self,ip_add):
self.username = 'user'
self.password = 'pass'
self.host = ip_add
self.connection= False
self.ketnoi = ''
def connect(self):
try:
self.ketnoi = telnetlib.Telnet(self.host, timeout=15)
self.ketnoi.write(self.username.encode()+b'\r')
self.ketnoi.write(self.password.encode()+b'\r')
self.ketnoi.expect([b'>',b']'],5)
self.connection = True
return True
except Exception as error:
print(error)
return False
和错误消息:
Traceback (most recent call last):
File "src\gevent\greenlet.py", line 766, in gevent._greenlet.Greenlet.run
File "C:\Python34\lib\site-packages\socketio\server.py", line 599, in _handle_event_internal
r = server._trigger_event(data[0], namespace, sid, *data[1:])
File "C:\Python34\lib\site-packages\socketio\server.py", line 628, in _trigger_event
return self.handlers[namespace][event](*args)
File "C:\Python34\lib\site-packages\flask_socketio\__init__.py", line 277, in _handler
*args)
File "C:\Python34\lib\site-packages\flask_socketio\__init__.py", line 680, in _handle_event
ret = handler(*args)
File "D:\web_app\app.py", line 301, in kiemtra_olt
device.connect()
File "D:\web_app\telnettb.py", line 15, in connect
self.ketnoi = telnetlib.Telnet(self.host, timeout=15)
File "C:\Python34\lib\telnetlib.py", line 221, in __init__
self.open(host, port, timeout)
File "C:\Python34\lib\telnetlib.py", line 237, in open
self.sock = socket.create_connection((host, port), timeout)
File "C:\Python34\lib\site-packages\gevent\socket.py", line 83, in create_connection
addrs = list(getaddrinfo(host, port, 0, SOCK_STREAM))
File "C:\Python34\lib\site-packages\gevent\_socketcommon.py", line 218, in getaddrinfo
in addrlist
File "C:\Python34\lib\site-packages\gevent\_socketcommon.py", line 217, in <listcomp>
for af, socktype, proto, canonname, sa
NameError: name 'SocketKind' is not defined
2019-05-27T08:41:52Z <Thread at 0x4e3c470: <bound method Server._handle_event_internal of <socketio.server.Server object at 0x044CEA70>>(<socketio.server.Server object at 0x044CEA70>, '626fb5231dba41c5be8a226f8f8240b9', ['check_device', 'ip_add'], '/', None)> failed with NameError
发布于 2019-05-28 02:38:59
我相信您使用的Python版本太旧了。根据this issue,在3.4.3中引入了SocketKind
类型。您使用的是3.4.2或更早的版本吗?升级到较新的Python应该可以解决您的问题。
https://stackoverflow.com/questions/56322198
复制相似问题