[問題] 請問telnetlib裡的read_until()
文件上的說明是直到預期的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
推
02/20 13:06,
6年前
, 1F
02/20 13:06, 1F
推
02/20 14:01,
6年前
, 2F
02/20 14:01, 2F
→
02/20 14:01,
6年前
, 3F
02/20 14:01, 3F
我的意思是當使用read_until時,假設預期要讀的是xxxx,可是當讀不到xxxx沒有時,它
還是會讀一些其它的東西進來,比方說以PTT為例,預期讀到'請輸入代號'後去輸入帳號,
可是就算把它改成預期讀'請輸入您的密碼',read_until 還是會把整串東西讀起來,而裡
面並沒有包含'請輸入您的密碼',也就是說讀進了不想讀的東西進來, 所以我不太明白它
的用途在哪
※ 編輯: jijuan (36.232.47.202), 02/20/2019 15:57:14
推
02/20 17:39,
6年前
, 4F
02/20 17:39, 4F
→
02/20 17:39,
6年前
, 5F
02/20 17:39, 5F
→
02/20 17:40,
6年前
, 6F
02/20 17:40, 6F
推
02/24 14:38,
6年前
, 7F
02/24 14:38, 7F
→
02/24 14:38,
6年前
, 8F
02/24 14:38, 8F
Python 近期熱門文章
PTT數位生活區 即時熱門文章