gpt4 book ai didi

expect - 如何做到超时小于 1 秒?

转载 作者:行者123 更新时间:2023-12-02 05:18:25 25 4
gpt4 key购买 nike

要编写更健壮的脚本,“忘记”期望缓冲区的内容是很有用的,以确保仅在最近收到的输入上进行匹配:

# 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

是否可以在不修补预期源的情况下使超时小于 1 秒?

注: 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com