Я тестирую студенческие задания, которые выполняются внутри Qemu, и я использую Pexpect для отправки команд и захвата вывода.
Я заметил, что когда я отправляю команду с использованием spawn
, child.sendline(command)
работает так, как описано в документы, и я могу получить вывод, который мне нужен, просеивая child.before
и удаляя ложные подсказки (как объяснено здесь ).
Однако, если я отправлю ту же команду, используя 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
?