【问题标题】:calling sleep bash command in pexpect在 pexpect 中调用 sleep bash 命令
【发布时间】:2020-06-08 20:29:40
【问题描述】:

我正在尝试在pexpect sendline 中调用sleep 10 命令。但是,pexpect 不会等待睡眠完成。

以下是可用于重现问题的示例。

import pexpect
import sys

child = pexpect.spawn('bash', encoding='utf-8')
child.logfile = sys.stdout
child.expect('~')
child.sendline("date");
child.expect('2020')
child.sendline('sleep 10')
child.expect('~',timeout=12)
child.sendline('date')

注意:

  1. 我已经知道使用 time.sleep() 函数,但是在我的要求中有一个限制(bash 命令和预期输出从一些不同的工具发送到 python 代码),这使得从 bash 使用睡眠只要。此示例只是该问题的缩小版本。

  2. ~ 更改为您的 bash 提示符以重现该问题。

【问题讨论】:

    标签: python pexpect


    【解决方案1】:

    问题是您的child.expect('~',timeout=12) 立即返回,因为缓冲区中已经有一个旧的~ 可以匹配。

    当你发送date时,你会有这样一行

    Tue Jun  9 15:32:45 GMT 2020
    ~ $ 
    

    然后您期望2020,这使\r\n~ $ 仍在缓冲区中。 您应该始终使用匹配到下一个命令提示符的匹配项,或者在发送新命令之前刷新缓冲区。虽然有一个.flush() 方法,但它并没有这样做。你可以改为使用,例如,

    child.read_nonblocking(size=9999, timeout=.1)
    

    【讨论】:

      猜你喜欢
      • 2023-03-31
      • 2019-09-16
      • 2017-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-19
      • 2021-05-21
      • 1970-01-01
      相关资源
      最近更新 更多