1 回答

TA贡献1866条经验 获得超5个赞
要利用引擎stockfish,您需要启动流程并保持运行。
您正在执行它,通过标准输入管道传递 2 个命令,然后关闭管道。关闭管道向程序表明您不再对引擎所说的内容感兴趣。
要运行它 - 并保持它运行 - 你需要类似的东西:
func startEngine(enginePath string) (stdin io.WriteCloser, stdout io.ReadCloser, err error) {
cmd := exec.Command(enginePath )
stdin, err = cmd.StdinPipe()
if err != nil {
return
}
stdout, err = cmd.StdoutPipe()
if err != nil {
return
}
err = cmd.Start() // start command - but don't wait for it to complete
return
}
返回的管道允许您发送命令并实时查看输出:
stdin, stdout, err := startEngine("/usr/local/bin/stockfish")
sendCmd := func(cmd string) error {
_, err := stdin.Write([]byte(cmd + "\n"))
return err
}
sendCmd("position examplepos")
sendCmd("go depth 20")
然后粗略地读取异步响应:
b := make([]byte, 10240)
for {
n, err := stdout.Read(b)
if err != nil {
log.Fatalf("read error: %v", err)
}
log.Println(string(b[:n]))
}
一旦bestmove d2d4 ponder g8f6出现like 行,就知道当前的分析命令已经完成。
如果这就是您所需要的,您可以关闭引擎(通过关闭stdin管道),或者保持打开状态以进一步提交命令。
- 1 回答
- 0 关注
- 145 浏览
添加回答
举报