在 Windows 7 上,我可以通过命令行与国际象棋引擎进行通信。Win 7上与Stockfish的小示例会话:
C:\run\Stockfish>stockfish-x64.exe
Stockfish 2.2.2 JA SSE42 by Tord Romstad, Marco Costalba and Joona Kiiski
quit
C:\run\Stockfish>
第一行是引擎输出的,'quit' 是我输入退出引擎的内容(我可以做其他事情,但这对我来说很清楚)。
现在我想从 python 与那个引擎进行通信:
import subprocess
engine = subprocess.Popen(
'stockfish-x64.exe',
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
)
for line in engine.stdout:
print(line.strip())
engine.stdin.write('quit\n')
我明白了
C:\run\Stockfish>communicate.py
b'Stockfish 2.2.2 JA SSE42 by Tord Romstad, Marco Costalba and Joona Kiiski'
但它不会退出引擎(没有C:\run\Stockfish>
提示),它会一直等待输入。我必须用手关上窗户。似乎没有将我的退出消息(python 脚本的最后一行)写入标准输入。
换句话说,我可以从标准输出读取,但是当我写入标准输入时,什么也没有发生。
我做错了什么以及如何做对?