【问题标题】:Difficulty in sendline method of pexpect modulepexpect模块的sendline方法的难点
【发布时间】:2023-04-08 18:32:02
【问题描述】:

如果我希望面试问题中有一些字符串,我需要通过给出预定义的答案来自动化面试过程。

我正在使用 pexpect.spawn 启动子进程并完成面试。

我的部分代码是:

child.expect("\> ")

child.sendline("test")

我正在使用 child.logfile=fout 将面试过程保存在一个文件中

fout 的一部分是:

What would you like to use for the display name:^M
> ^M

Invalid input: ''^M

^M

What would you like to use for the display name:^M
> test


test^M

如上所示,它第一次匹配新行,因此出现注释“无效输入:”。 所以它两次问同一个问题,然后它接受“测试”作为答案。

我该怎么做才能让我的回答第一次被接受?

child.expect中的参数“timeout”有什么关系吗?

我尝试过使用 timeout=0、timeout=-1 等选项,但没有任何效果。

【问题讨论】:

  • 是的。你为什么要逃避>? (我不太了解 python,所以它可能是合法的,但'> ' 似乎更支持 pexpect 文档样本的内容。)
  • 这次我没有转义“>”字符。我用过:child.expect(">")。但我的 fout 看起来完全一样。

标签: python pexpect


【解决方案1】:

哇,得到答案: child.setecho(False)

在这个问题上工作了几个小时。 幸运的是,这行得通。

我认为问题在于每当我们发送一行时,如果我们发送的行与我们预期的模式匹配(就像我们通常使用的提示一样。)然后在结果出来之前 期待回报。

不得不说我们必须仔细选择预期模式。 通常对我来说,我遵循示例中推荐的方式,设置 PS1=[PEXPECT]\$ 然后 setecho off 然后发送命令来更改 PS1 这个过程对我有用。

【讨论】:

  • 我不遵循这个答案的大部分内容,但设置 child.setecho(False) 确实对我有用(允许我删除多余但必要的发送线)
猜你喜欢
  • 2013-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-05
  • 2015-01-06
  • 1970-01-01
  • 2012-06-08
相关资源
最近更新 更多