2013-11-06 3 views
0

Я пишу код в Python. Внутри кода вызывается приложение Blackbox, написанное на языке C++. Иногда это приложение C++ не сходится и появляется сообщение об ошибке. Эта ошибка не завершает код Python, но приостанавливает выполнение. После нажатия кнопки ok для сообщения об ошибке код python продолжает работать до тех пор, пока не появится код конца или сообщение снова. Есть ли способ справиться с этой проблемой в Python: код обнаруживает сообщение и нажимает ОК?Продолжение работы в Python

Благодаря

+1

полностью зависит от того, как вы называете свой черный ящик C++. – njzk2

+0

Вызывает ли это исключение? Что вызывает окно с ошибкой, программа на C++ или программа python? Нужно ли вам физически перемещать мышь? Я думаю, что здесь недостаточно информации, чтобы ответить на ваш вопрос. – JFA

+0

, когда вы говорите, что «эта ошибка не завершает код Python», вы имеете в виду код C++? – bj0

ответ

1

Я считаю, что в вашем случае программа Python фактически не продолжить выполнение, если программа не началась как подпроцесс завершается - это поведение или subprocess.check_call, которые вы говорите, используются для запуска подпроцесса.

До тех пор, пока вы начинаете подпроцесс с check_call, практически невозможно найти промежуточное состояние подпроцесса, пока оно не прекратится и вы получите код выхода.

Итак, вы можете использовать конструктор subprocess.Popen() для создания объекта Popen, который запускает подпроцесс, но не ждет завершения подпроцесса. Таким образом, вы можете проверить состояние подпроцесса неявно, проверив его другие выходы, если они, к сожалению, существуют для него (например, вы можете также прочитать вывод подпроцесса, если знаете, что он записывает свои ошибки или другие сообщения в stdout или stderr).

P.S. Лучшее решение - исправить программу на C++.

0

Тимур правильный. Если программа C++ явно не дает вам возможность проверить статус, ответить на диалог или заставить его работать без отображения диалога, в python нет ничего, что могло бы решить эту проблему, насколько я знаю.

Есть некоторые обходные пути, которые могут сработать для вас. В зависимости от вашей платформы вы можете использовать модуль расширения оконного менеджера (например, pywin32 или python-xlib) для поиска диалогового окна и программным щелчком на кнопке «ОК».

Если вы можете использовать Jython, вы можете использовать Sikuli, что является очень приятным и простым в использовании пакетом визуальной автоматизации.

Смежные вопросы