我正在测试在Qemu中运行的学生作业,并且我使用Pexpect发送命令并捕获输出。
我注意到,当我使用spawn
发送命令时,child.sendline(command)
的工作方式如文档中所述,通过筛选child.before
并将其删除,可以得到我想要的输出虚假提示(如here所述)。
但是,如果我使用REPLWrapper.run_command(command)
发送相同的命令,则会发现一些区别:
- 我必须在
command
上添加换行符,否则它不会发送 - 返回的输出包含输入命令的部分副本。
例如,当我使用command
发送REPLWrapper
时,如下所示:
child = REPLWrapper(INIT_REPL,PROMPT,None)
command = "run assignment4 -x 10 -y 20"
result = child.run_command(command + "\n")
然后result
包含命令的一部分,例如-x 10 -y 20
:
-x 10 -y 20
command_result_line_1
command_result_line_2
但是,如果我使用spawn
发送相同的命令,如下所示:
child = pexpect.spawn(INIT_REPL,encoding="utf-8",timeout=3)
command = "run assignment4 -x 10 -y 20"
child.expect(PROMPT) # expect initial prompt
child.sendline(command)
child.expect(PROMPT)
child.expect([PROMPT,pexpect.TIMEOUT])
result = child.before
然后结果不包含命令中的任何额外文本:
command_result_line_1
command_result_line_2
我使用这些pexpect组件是错误的,还是REPLWrapper
中的错误?