作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
要编写更健壮的脚本,“忘记”期望缓冲区的内容是很有用的,以确保仅在最近收到的输入上进行匹配:
# this leaves expect buffer with unmatched history
# + accumulates incoming data over 1 sec
set timeout 1
expect
# match everything in the buffer ~"forget"
expect *
# subsequent expect commands will see only what appeared since now
set timeout 0
将不起作用,因为第一个期望不会将新传入的数据留在缓冲区中。
最佳答案
我不确定如何在 tcl 解释器中刷新缓冲区。
我不确定您的用例,但我发现远程 shell 脚本的最可靠格式超出预期,最简单的方法是包含 #randomnumber
在每次发送结束时,期待 #randomnumber
,这可确保缓冲区同步到我发送到生成进程的最后一行。如果生成的进程没有响应您发送的字符,您的里程会有所不同。
来自 pexpect 的纯 python 实现如果您同意从 TCL 实现转移到 python,那就太好了。缓冲区的工作方式略有不同,因此需要一些时间来适应。如果您通过远程 shell 执行命令,我建议您使用 python-remote (我写的)
您可以通过上面使用的方法为缓冲区加气
import pexpect
spawn = pexpect.spawn(command)
stuff_inbuffer = spawn.read_nonblocking(size=100000, timeout=0.1)
import random, pexpect
spawn = pexpect.spawn(command)
rand = random.random()
spawn.sendline(command + " #%s" %(rand))
spawn.expect("%s\r\n" %(rand))
results = spwan.read(size=100000, timeout=10)
spawn.expect("something")
results = spawn.buffer
results = spawn.before
关于expect - 如何做到超时小于 1 秒?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14954743/
我是一名优秀的程序员,十分优秀!