11

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 スクリプトの最後の行) が stdin に書き込まれないようです。

つまり、stdout から読み取ることはできますが、stdin に書き込んでも何も起こりません。

私は何を間違っていますか、そしてそれを正しく行うにはどうすればよいですか?

4

3 に答える 3

2

デッドロックが発生しました。サブプロセスは入力を待っていますが、プログラムはさらに行を出力するのを待っています

for line in engine.stdout:
    print(line.strip())

このループは、サブプロセスがそのstdout.

于 2012-09-09T18:59:21.143 に答える