将棋エンジンの叩き台

連休中の世界コンピュータ将棋大会の影響で開発を始めようとする人が居るみたいなので簡単な叩き台を置いておきます。
環境はpythonpython-shogiを使うことで以下のように簡単に反則をしない(合法手をランダムに指す)くらいの対戦が可能になります。
要らない行もありますが処理を差し込む叩き台に置いてあります。
 
Windows環境の将棋所では「python ****.py」と一行書いたバッチファイルを作ってエンジンに指定してください。
 

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 2020/5/25 改修 usiランダムプレイ python-shogi版

import shogi
import random
import sys

while True:
    line = sys.stdin.readline()
    if 'usi' in line:
        print('id name random 0.1\n')
        print('id author ore\n')
        # print('option name BookFile type string default book\n')
        # print('option name UseBook type check default true\n')
        print('usiok', flush=True)

    if 'isready' in line:
        print('readyok', flush=True)

    if 'quit' in line:
        sys.exit()

    if 'usinewgame' in line:
        continue

    if 'gameover' in line:
        continue

    if 'position' in line:
        if 'startpos' in line:
            line = line.replace('startpos', 'lnsgkgsnl/1r5b1/ppppppppp/9/9/9/PPPPPPPPP/1B5R1/LNSGKGSNL b - 1')
        sfen = ' '.join(line.split(' ')[1:5])
#        print('info string 局面 '+sfen) # 局面
        board = shogi.Board(sfen)

        if 'moves' in line:
            moves = line.split()[6:]
            for move in moves:
                board.push_usi(move)
        
    if 'go' in line:
        moves = []
        for move in board.legal_moves:
            moves.append(move)
        
        if len(moves) == 0:
            print('bestmove resign', flush=True)
        else:
            next_move = random.choice(moves) # ここが乱数発生場所
            print('bestmove '+next_move.usi(), flush=True)
    • -

追記:
pythonからsubprocessでやねうら王を呼べればMulti Ponderの実装は簡単じゃないかとのコメントを頂きました。
ええ,そうですよ。是非御自身でやってみてください。
何が重要なポイントか少し見えてくると思います。