Я хочу, чтобы шахматный движок анализировал некоторую игру в формате pgn.TProcess - Захват вывода из нескольких команд Process.Input.Write (...)
До сих пор у меня есть.
begin
// ...
P:=TProcess.Create(nil);
stL:=TStringList.create;
P.Commandline:='Houdini'; // <- this is chess engine, Houdini.exe
P.Options:=P.Options+[poUsePipes];
P.ShowWindow:=swoHide;
P.Execute;
st:='uci'+ Lineending;
P.Input.Write(st[1], Length(st));
// st:=P.Output.ReadAnsiString; <- this is my try
// showmessage(st);
st:='setoption name multipv value 3'+lineending;
P.Input.Write(st[1], Length(st)); // so after second command how to catch different output
st:='isready'+lineending;
P.Input.Write(st[1], Length(st));
st:='ucinewgame'+lineending;
P.Input.Write(st[1], Length(st));
st:='isready'+lineending;
P.Input.Write(st[1], Length(st));
// another part of code should be here ***
st:='quit'+lineending;
P.Input.Write(st[1], Length(st)); // quiting the engine
stL.LoadFromStream(P.Output);
stL.SaveToFile('AjDaVidime.txt'); // nothing stores particular
P.Free;
stL.Free;
end;
Так вопрос в том, как получить выход из мощности двигателя после каждого P.Input.Write ...
Другая часть кода следующим образом (это за странное поведение StackOverflow, чтобы опубликовать свой вопрос. Это код должен быть в первой в *
// This for loop is main loop for analyzing chess game
for i:=1 to moves do begin
st:='position fen '+arrayFen[i]+lineending;
P.Input.Write(st[1], Length(st));
st:='go movetime 1000'+lineending; // Fen is position 1000ms is 1sec, so engine Must analyze 1 sec. that position, so go movetime 1000 is command.
P.Input.Write(st[1], Length(st));
Sleep(1000); // <- is this neccessary?
end;