pexpect:使用pexpect时有什么方法可以防止输入溢出?

时间:2016-09-09 10:49:53

标签: python linux expect tty pexpect

使用pexpect,我连接到一台Linux机器控制台,这是一台功能有限的机器。 当我生成连接并尝试使用send或sendline执行命令时,我收到错误"ttyAMA0: 1 input overrun(s)"

这可能是因为pexpect在消耗之前非常快速地向控制台发送输入并导致输入缓冲区溢出。 如果以某种方式pexpect减慢了输入到控制台的速度,那么它将阻止输入缓冲区溢出。是否有任何参数定义输入到控制台的字符速率?

对于类似的问题,tcl-expect有命令send_slow,它将输入速率降低到提供的值。很高兴在python-expect中有send_slow的等价物。

还尝试在期望中设置窗口大小,但错误仍然没有变化。 我得到的错误也是间歇性的。

1 个答案:

答案 0 :(得分:0)

免责声明:这是一种解决方法,而不是缓冲区溢出问题的实际解决方案。 做了以下步骤:

  1. 在调用具有pexpect的python脚本之前,使用stty将波特率设置为与console / telnet connect匹配。例如。 stty speed 50
  2. 在pexpect中生成新shell,并将delaybeforesenddelayaftersend设置为所需的值(仅当您的devide太慢时才需要)
  3. 将sendline替换为我们自己的自定义sendline_slow,它将一次发送1个字符。
  4. def sendline_slow(spawn_id,cmd):

       for char  in str(cmd):
          spawn_id.send(char)
       spawn_id.send('\n')
    

    宾果。现在我能够以超级慢的方式发送命令到控制台......!