неожиданные различия между Spawn () и REPLWrap - PullRequest
0 голосов
/ 12 апреля 2020

Я тестирую студенческие задания, которые выполняются внутри Qemu, и я использую Pexpect для отправки команд и захвата вывода.

Я заметил, что когда я отправляю команду с использованием spawn, child.sendline(command) работает так, как описано в документы, и я могу получить вывод, который мне нужен, просеивая child.before и удаляя ложные подсказки (как объяснено здесь ).

Однако, если я отправлю ту же команду, используя 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?

...