在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脚本的最后一行)写入标准输入流中。
换句话说,我可以从标准输出中读取,但是当我向标准输入中写入内容时,没有任何反应。
我做错了什么,以及如何正确地操作?
C:\run\Stockfish>
提示符来自您的shell;为什么您会期望子进程打印它呢? - WooblePopen
中添加了一个额外的参数..., bufsize=1, ...
,代码才能正常运行。 - Darius Duesentrieb