看板 Python 關於我們 聯絡資訊
文件上的說明是直到預期的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(): 想請問如果要判斷當指定的字串被讀入要執行對應的動作時,該怎麼寫比較好。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.232.47.202 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1550632858.A.598.html
CodingMan: 是要練習嗎??版上應該有別人寫好的版本了? 02/20 13:06
CodingMan: read_util 意思是讀到xxxx 就中斷 剩下的就不管了 02/20 14:01
CodingMan: 你 sleep 2 秒了 當然 ptt 一訂都載入完了 所以可以登 02/20 14:01
我的意思是當使用read_until時,假設預期要讀的是xxxx,可是當讀不到xxxx沒有時,它 還是會讀一些其它的東西進來,比方說以PTT為例,預期讀到'請輸入代號'後去輸入帳號, 可是就算把它改成預期讀'請輸入您的密碼',read_until 還是會把整串東西讀起來,而裡 面並沒有包含'請輸入您的密碼',也就是說讀進了不想讀的東西進來, 所以我不太明白它 的用途在哪 ※ 編輯: jijuan (36.232.47.202), 02/20/2019 15:57:14
CodingMan: 誠如我推文所說 讀到 xxxx 就可以做下一步了 02/20 17:39
CodingMan: 不用在那邊等兩秒...你光輸入帳密就要四秒... 02/20 17:39
CodingMan: 版眾寫的 PTT Library 已經處理掉所有案例登入成功了 02/20 17:40
alan23273850: 所以我都用 read_very_eager,一直讀直到沒東西為止 02/24 14:38
alan23273850: 如果你要偵測畫面變化的話就要自己多加一層buffer處 02/24 14:38