使用pexpect,我连接到一个linux机器控制台,这是一个功能有限的机器。
当我生成一个连接并尝试使用send或sendline执行命令时,我会得到一个错误,说"ttyAMA0: 1 input overrun(s)"
这可能是因为pexpect
在输入被消耗之前非常快地将输入发送到控制台并导致输入缓冲区溢出。
如果以某种方式pexpect
减慢控制台输入的速度,那么它将防止输入缓冲区溢出。是否有任何参数定义输入到控制台的字符速率?
对于类似的问题,tcl expect有命令send_slow,这会减慢输入速率到所提供的值。很高兴在python expect中有任何等价于send_slow
的内容。
也尝试在expect中设置窗口大小,但仍然没有更改错误。
而且我得到的错误是间歇性的。
最佳答案
免责声明:这是一个比实际解决缓冲区溢出问题的方法。
执行以下步骤:
在调用具有pexpect的python脚本之前,请使用stty将波特率设置为与console/telnet connect匹配。例如stty speed 50
在pexpect中生成新的shell,并将delaybeforesend
和delayaftersend
设置为所需的值(仅当设备太慢时才需要)
用我们自己的自定义发送线替换发送线,它将一次发送1个字符。
def sendline_slow(生成id,命令):
for char in str(cmd):
spawn_id.send(char)
spawn_id.send('\n')
答对 了。现在我可以以超慢的方式发送命令来控制。。。!
关于python - pexpect:使用pexpect时有什么方法可以防止输入溢出?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39409892/