Обмен данными с консольным приложением
Вложений: 1
Хочу написать свой GUI к консольному приложению, однако организовать обмен данными не получается.
Код:
#include <Constants.au3> Нашёл на форуме другой вариант: Код:
#include <Constants.au3> Подскажите, пожалуйста, что делать) Скрипты и программа прилагаются. Как разукрашивать скрипты для форума - не знаю, поэтому использую тэг code. |
Вот небольшой пример, попробуй вставить свою программу и посмотреть
Код:
; Demonstrates StdoutRead() |
что-то не сразу сообразил, что программа требует интеракцию с пользователем. посмотрю, что можно сделать
|
видно, это особенности приложения, но оно не дает взаимодействовать с собой при вызове из скрипта перенаправленными потоками, при первом же приглашении на ввод данных закрывается. вот макет gui, может кто сможет разобраться, так хотя бы GUI не надо будет делать :)
Код:
; Demonstrates StdoutRead() |
Да, прочитать первичные данные мне удавалось (если вызывать gnugo без параметров), но вот передать что-то... В --mode gtp вообще ничего не выходит (ну здесь-то просто не выдаёт окно приветствия).
Цитата:
1. Запустить 2. Передать команду (version или, например, d4, если без параметров запускать) 3. Прочитать ответ 4. Ожидать следующей команды Дальше, надеюсь, разберусь. Цитата:
|
Цитата:
|
О! Добился прогресса. Удалось получить ответ от программы.
Код:
#include <Constants.au3> 1. Даю время на запуск программы. Можно и увеличить на несколько секунд, ничего страшного. 2. При передаче команды добавляем <Enter> (@CRLF) 3. При чтении ответа указываем второй параметр. В справке написано, что это означает максимальное количество прочитываемых символов, но почему-то и 1, и 100 дают одинаковый результат - читается всё. Итак, ответ получен. Но возникла сложность на следующем этапе - если теперь передать вторую команду Код:
StdinWrite($PID, "showboard" & @CRLF) Если же вставить "заглушку" StdinWrite($PID), то скрипт завершается на этой инструкции. Если передавать сразу две команды: Код:
StdinWrite($PID, "version" & @CRLF & "showboard" & @CRLF) |
Coutty, у меня твой код ничего не показывает. пустой msgbox
|
Весьма странно, у меня и сегодня работает...
Но, наверное, не стоило начинать это на AutoIt. Вот только с C# я тем более не разобрался >_< |
Мммм... можно сказать, что решилось.
1. Отсылаю команду №1 2. Читаю ответ 3. Отсылаю команду №2 4. Жду 0,5 сек. 5. Читаю ответ Так ответы получаются разные. Но тоже не совсем гладко. Второй ответ включает в себя и первый тоже. Таким образом, возникает проблема разбора. Вот если бы предыдущий ответ удалялся... К счастью, протокол GTP предусматривает нумерацию запросов и ответов, т.ч. здесь всё-таки можно что-то придумать. |
Время: 14:46. |
Время: 14:46.
© OSzone.net 2001-