Pexpect的spawn()和REPLWrap之间的意外差异

我正在测试在Qemu中运行的学生作业,并且我使用Pexpect发送命令并捕获输出。

我注意到,当我使用spawn发送命令时,child.sendline(command)的工作方式如文档中所述,通过筛选child.before并将其删除,可以得到我想要的输出虚假提示(如here所述)。

但是,如果我使用REPLWrapper.run_command(command)发送相同的命令,则会发现一些区别:

  1. 我必须在command上添加换行符,否则它不会发送
  2. 返回的输出包含输入命令的部分副本。

例如,当我使用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中的错误?

chensycsy 回答:Pexpect的spawn()和REPLWrap之间的意外差异

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/2457439.html

大家都在问