作者jijuan ()
看板Python
标题[问题] 请问telnetlib里的read_until()
时间Wed Feb 20 11:20:55 2019
文件上的说明是直到预期的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://webptt.com/cn.aspx?n=bbs/Python/M.1550632858.A.598.html
1F:推 CodingMan: 是要练习吗??版上应该有别人写好的版本了? 02/20 13:06
2F:推 CodingMan: read_util 意思是读到xxxx 就中断 剩下的就不管了 02/20 14:01
3F:→ 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
4F:推 CodingMan: 诚如我推文所说 读到 xxxx 就可以做下一步了 02/20 17:39
5F:→ CodingMan: 不用在那边等两秒...你光输入帐密就要四秒... 02/20 17:39
6F:→ CodingMan: 版众写的 PTT Library 已经处理掉所有案例登入成功了 02/20 17:40
7F:推 alan23273850: 所以我都用 read_very_eager,一直读直到没东西为止 02/24 14:38
8F:→ alan23273850: 如果你要侦测画面变化的话就要自己多加一层buffer处 02/24 14:38