文件上的說明是直到預期的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():
想請問如果要判斷當指定的字串被讀入要執行對應的動作時,該怎麼寫比較好。