pexpect模块中sendline方法的困难
我想要自动化面试过程,也就是说,如果面试问题中出现某个特定的字符串,我就给出预设的答案。
我正在使用 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
从上面的内容可以看出,第一次匹配到换行符,所以出现了“无效输入:”的提示。这样它就问了同样的问题两次,然后才接受“test”作为答案。
我该怎么做才能让我的答案第一次就被接受呢?
这和 child.expect 中的“timeout”参数有关吗?
我尝试过使用 timeout=0、timeout=-1 等选项,但都没有效果。
1 个回答
0
哇,找到了答案:child.setecho(False)
我花了几个小时在这个问题上,幸运的是这个方法有效。
我觉得问题出在每次我们发送一行命令时,如果这行命令和我们预期的模式(比如我们通常使用的提示符)匹配,那么在结果出来之前,pexpect就会返回。
必须说,我们需要仔细选择期望的模式。一般来说,我按照示例中推荐的方法,设置PS1=[PEXPECT]\$,然后关闭回显,再发送命令来改变PS1,这个过程对我来说是有效的。