我正在尝试创建模型telnet服务器(用于现有代码的某些功能测试)。现在我只修改了服务器欢迎消息,我试图使用客户端代码读取此消息,但它读取方法在超时时失败,没有其他信息。但是启用pudb调试器后,它大部分时间都可以工作......
我正在使用virtualenv,使用pip安装了pudb和telnetsrv。 Python 2.7.12,ubuntu 16.04。
服务器代码:
import SocketServer
from telnetsrv.threaded import TelnetHandler
class MyHandler(TelnetHandler):
WELCOME = "HI from custom server"
class TelnetServer(SocketServer.TCPServer):
allow_reuse_address = True
server = TelnetServer(("0.0.0.0", 8023), MyHandler)
server.serve_forever()
客户代码:
import telnetlib
HOST = '127.0.0.1'
PORT = 8023
# from pudb import set_trace; set_trace()
tn = telnetlib.Telnet(HOST, PORT)
data = tn.read_until("custom server", timeout=1)
print "Data: " + data
tn.close()
客户端输出:
$ python client.py
Data:
启用了pudb的客户端输出(逐步执行)
$ python client.py
Data: HI from custom server
当然,当我执行shell telnet命令时,一切正常:
$ telnet 127.0.0.1 8023
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
HI from custom server
Telnet Server>
我真的很感激有关如何调试此问题的任何提示。谢谢!
答案 0 :(得分:0)
确保实际连接正在进行中。要做到这一点,请编辑代码,将 tn.set_debuglevel(100)添加到脚本中,如下所示:
import telnetlib
HOST = '127.0.0.1'
PORT = 8023
# from pudb import set_trace; set_trace()
tn = telnetlib.Telnet(HOST, PORT)
tn.set_debuglevel(100)
data = tn.read_until("custom server", timeout=1)
print "Data: " + data
tn.close()
这将确保打印出所有数据,以便您了解正在进行的操作。
我的理论是,您没有连接,或者您的数据实际上并没有输出"自定义服务器"因此它不会抓住它,或者你的超时时间太短。