【问题标题】:pexpect : Is there any way to prevent input overrun while using pexpect?pexpect :在使用 pexpect 时有什么方法可以防止输入溢出?
【发布时间】:2016-09-09 10:49:53
【问题描述】:

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

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

对于类似的问题,tcl-expect 有命令 send_slow 将输入速率减慢到提供的值。很高兴在 python-expect 中有任何相当于 send_slow 的东西。

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

【问题讨论】:

    标签: python linux expect tty pexpect


    【解决方案1】:

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

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

    def sendline_slow(spawn_id, cmd):

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

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

    【讨论】:

      猜你喜欢
      • 2013-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-18
      • 2022-12-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多