[問題] 請問telnetlib裡的read_until()

作者: jijuan   2019-02-20 11:20:55
文件上的說明是直到預期的byte字串才讀進來,用PTT來測試的話
import telnetlib
import time
tn = telnetlib.Telnet('ptt.cc')
account = 'username'.encode('utf-8')
password = 'password'.encode('utf-8')
tn.read_until(b'test', timeout=10)
tn.write(account + b'\r\n')
tn.read_until(b'test', timeout=10)
tn.write(password + b'\r\n')
time.sleep(2)
tn.write(b'\r\n')
發現這樣還是可以成功登入,比方說一開使要判斷是否有'請輸入代號'的字串,有的話才
輸入帳號,可是就算是用其它的字元去判斷還是沒有差別。然後又看到文件後面說:
When no match is found, return whatever is available instead, possibly empty b
ytes.
所以應該是沒有讀到預期的字串,所以就把能讀的讀進來這樣。原本以為如果預期的字串
一直都沒來,timeout 到了之後就什麼也不讀,也就是為空,然後藉此去判斷是否讀入預
期的字串。
後來又發現只寫這樣也能登入,當然這是因為知道輸入帳號後接著輸入密碼的緣故。
time.sleep(2)
tn.write(account + b'\r\n')
time.sleep(2)
tn.write(password + b'\r\n')
所以我不太明白read_until()的用途?另外有看到另一種寫法是用 read_very_eager(),
然後用字串是否在讀入的內容裡判斷這樣,像是
if read in tn.read_very_eager():
想請問如果要判斷當指定的字串被讀入要執行對應的動作時,該怎麼寫比較好。
作者: CodingMan (程式俠)   2019-02-20 13:06:00
是要練習嗎??版上應該有別人寫好的版本了?read_util 意思是讀到xxxx 就中斷 剩下的就不管了你 sleep 2 秒了 當然 ptt 一訂都載入完了 所以可以登誠如我推文所說 讀到 xxxx 就可以做下一步了不用在那邊等兩秒...你光輸入帳密就要四秒...版眾寫的 PTT Library 已經處理掉所有案例登入成功了
作者: alan23273850   2019-02-24 14:38:00
所以我都用 read_very_eager,一直讀直到沒東西為止如果你要偵測畫面變化的話就要自己多加一層buffer處

Links booklink

Contact Us: admin [ a t ] ucptt.com