Я создаю автоматизацию тестирования, которая использует приложение без каких-либо интерфейсов. Тем не менее, приложение вызывает пакетный скрипт, когда он меняет режимы, и поэтому я могу поймать переходы режима.
Я хочу сделать, чтобы пакетный скрипт предоставил вход для моего скрипта python (у меня есть машина состояния, работающая на python) во время выполнения. Таким образом, я могу контролировать состояние приложения с помощью python вместо пакетного файла.
Я использую аналогичную машину состояний для одной из Karn Saheb: https://dev.to/karn/building-a-simple-state-machine-in-python
Однако вместо изменения состояний статически, как:
device.on_event('event')
Я хочу, чтобы скрипт python сделал что-то похожее:
while(True):
device.on_event(input()) # where the input is passed from the batch script:
REM state.bat
set CurrentState=%1
"magic code to pass CurrentState to python input()" %CurrentState%
Я вижу, что решением было бы запустить скрипт python из командного файла каждый раз, когда он вызывается с "событием", а затем сохраняет текущее событие в другом файле после завершения сценария python... Но я хочу избежать такого обработки и, скорее, оценить это во время выполнения.
Заранее спасибо!
Достаточно переносимый способ сделать это без уродливого опроса на временных файлах - использовать сокет: listen
основной процесс и запустить пакетный файл (ы), запускать небольшую программу, которая подключается к серверу и записывает сообщение.
Здесь есть соображения безопасности: вы можете начать с прослушивания только интерфейса loopback, с последующей аутентификацией, если локальному компьютеру не следует доверять.
Если у вас есть более одного из этих процессов или если вам нужно обработать процесс умирания до того, как он выпустит свой следующий отчет, вам придется использовать потоки или что-то вроде select
для объединения новостей из разных входных каналов (например, ожидание на дочернем для выхода из ожиданий новостей из следующего пакетного файла).