【发布时间】:2012-09-09 18:44:03
【问题描述】:
在 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”是我输入退出引擎的内容(有other things I can do,但我很清楚)。
现在我想通过 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;为什么你会期望一个子进程来打印它? -
希望它看到我的 python 脚本已经完成。
-
这很有帮助,谢谢分享!
-
代码对我不起作用,直到我向
Popen添加了一个额外的参数:..., bufsize=1, ... -
感谢@DariusDuesentrieb,似乎同时发生了变化。我加了。
标签: python process python-3.x chess