我正在使用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