Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Аватара для Coutty

Кот Ти


Сообщения: 7318
Благодарности: 1204

Профиль | Отправить PM | Цитировать


О! Добился прогресса. Удалось получить ответ от программы.
Код: Выделить весь код
#include <Constants.au3>

AutoItSetOption("ProvideRunStdout", 1)
AutoItSetOption("ProvideRunStdin", 1)

$PID = Run("gnugo.exe --mode gtp", '', @SW_HIDE, $STDIN_CHILD + $STDOUT_CHILD)
Sleep(1000)                            ; даём время gnugo для запуска
StdinWrite($PID, "version" & @CRLF)    ; запрашиваем номер версии

$line = StdoutRead($PID, 1)            ; читаем поток
MsgBox(0,0, $line)
Основные изменения:
1. Даю время на запуск программы. Можно и увеличить на несколько секунд, ничего страшного.
2. При передаче команды добавляем <Enter> (@CRLF)
3. При чтении ответа указываем второй параметр. В справке написано, что это означает максимальное количество прочитываемых символов, но почему-то и 1, и 100 дают одинаковый результат - читается всё.

Итак, ответ получен. Но возникла сложность на следующем этапе - если теперь передать вторую команду
Код: Выделить весь код
StdinWrite($PID, "showboard" & @CRLF)
$line = StdoutRead($PID, 1)
MsgBox(0,0, $line)
то ответ получаем тот же, что и на первую. Даже если поставить секундный интервал ожидания между ними.
Если же вставить "заглушку" StdinWrite($PID), то скрипт завершается на этой инструкции.

Если передавать сразу две команды:
Код: Выделить весь код
StdinWrite($PID, "version" & @CRLF & "showboard" & @CRLF)
то получаем ответ на обе, но следующий отдельный запрос выдаёт повтор.

Отправлено: 18:26, 18-04-2011 | #7