我正在使用Python模块telnetlib创建一个telnet会话(与一个国际象棋服务器),并且我遇到了一个问题,我真的无法环绕我的大脑。下面的代码完美地起作用:Python telnetlib:令人惊讶的问题
>>> f = login("my_server") #code for login(host) below.
>>> f.read_very_eager()
这样就吐出了服务器在登录时通常会打印的所有内容。但是,当我把它放在函数中,然后调用它:
>>> def foo():
... f = login("my_server")
... return f.read_very_eager()
...
>>> foo()
我什么也没得到(空字符串)。我可以检查登录是否正确执行,但由于某种原因,我看不到文本。那么它被吞噬了在哪里?
非常感谢。
为了完整起见,这里是登录(主持人):
def login(host, handle="guest", password=""):
try:
f = telnetlib.Telnet(host) #connect to host
except:
raise Error("Could not connect to host")
f.read_until("login: ")
try:
f.write(handle + "\n\r")
except:
raise Error("Could not write username to host")
if handle == "guest":
f.read_until(":\n\r")
else:
f.read_until("password: ")
try:
f.write(password + "\n\r")
except:
raise Error("Could not write password to host")
return f
尝试'print foo()' – ghostdog74 2010-10-22 23:11:59
没有区别。 – ptz 2010-10-23 09:41:24
我发现,如果不是使用read_very_eager(),而是使用read_until(),它确实有效。它应该是关于传输数据的协议和方式,而我没有必要的技术背景。 – ptz 2010-10-23 09:59:41