[问题] 请问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