Как мне справиться с этой ошибочной программой в pexpect? - PullRequest
0 голосов
/ 17 апреля 2019

Я использую pexpect для автоматизации программы под названием InstantMusic. Иногда эта программа отправляет eof до того, как она действительно завершится. Вот скриншот (если вы не можете прочитать скриншот, я привел ссылку на мой более подробный отчет об ошибках в конце вопроса.): enter image description here

Я могу определить подходящее окончание, используя этот код:

child.expect(
        ['Deleting*(pass -k to keep)*', pexpect.EOF], timeout=3000)

Однако моя проблема в том, что pexpect не перехватывает вывод за пределами eof. (Кстати, если не использовать этот «pexpect.EOF», pexpect выбрасывает исключение при обнаружении EOF.)

Есть ли способ решить эту проблему?

PS: я описал эту ошибку более подробно здесь . Но я обычно хотел бы иметь возможность справиться с этой ситуацией, даже если исходная программа глючит. Поскольку мне кажется, что это должно быть возможно.

1 Ответ

0 голосов
/ 18 апреля 2019

Кажется, что шаблон должен быть регулярным выражением, так будет ли это лучше?

child.expect(['Deleting.*\(pass -k to keep\)', pexpect.EOF], timeout=3000)
# .....................^^^................^

Похоже, что pexpect не реализует шаблоны tcl ожидают глобального стиля.

...