О! Добился прогресса. Удалось получить ответ от программы.
Код:
#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)
то получаем ответ на обе, но следующий отдельный запрос выдаёт повтор.