【问题标题】:How do I handle this buggy program in pexpect?我如何在 pexpect 中处理这个有问题的程序?
【发布时间】:2019-04-17 19:40:29
【问题描述】:

我使用 pexpect 来自动化一个名为 Instantmusic 的程序。有时,该程序在实际完成之前发送一个 eof。这是一个屏幕截图(如果您看不懂屏幕截图,我已在问题末尾链接到我更详细的错误报告。):

我可以使用以下代码检测到适当的结尾:

child.expect(
        ['Deleting*(pass -k to keep)*', pexpect.EOF], timeout=3000)

但是,我的问题是 pexpect 没有捕获超出 eof 的输出。 (顺便说一句,不使用“pexpect.EOF”会使 pexpect 在遇到 EOF 时抛出异常。)

有没有办法解决这个问题?

PS:我已经更详细地描述了这个错误here。但是即使源程序有问题,我通常也希望能够处理这种情况。因为在我看来应该是可能的。

【问题讨论】:

  • 请不要只发截图图片。
  • @EmilyE。截图不是解决问题所必需的,如果您认为有必要,我已链接到我的完整错误报告。

标签: python shell expect io-redirection pexpect


【解决方案1】:

看来模式需要是正则表达式,这样会更好吗?

child.expect(['Deleting.*\(pass -k to keep\)', pexpect.EOF], timeout=3000)
# .....................^^^................^

似乎 pexpect 没有实现 tcl 期望 glob 样式的模式。

【讨论】:

  • 我认为这不是问题,因为它在大多数情况下都能正常工作(源应用程序中的底层错误很少出现)。 “.*”实际上可能不起作用。同上。我没试过。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-08-11
  • 1970-01-01
  • 1970-01-01
  • 2021-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多