Вяленая рыба и питон

Я пытаюсь написать скрипт, использующий python, чтобы подать шахматные позиции на вяленую рыбу и получить оценки.

Мой вопрос основан на этом, как общаться с шахматным движком в Python?

Проблема с subprocess.pipe.

import subprocess, time
import os

os.chdir('C:\Users\Michael\Downloads\stockfish-6-win\stockfish-6-win\Windows'


engine = subprocess.Popen('stockfish', universal_newlines=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE)

def put(command):
    print('\nyou:\n\t'+command)
    engine.stdin.write(command+'\n')

def get():
    # using the 'isready' command (eng has to answer 'readyok')
    # to indicate current last line of stdout
    engine.stdin.write('isready\n')
    print('\nengine:')
    while True:
        text = engine.stdout.readline().strip()
        if text == 'readyok':
            break
        if text !='':
            print('\t'+text)

put('go depth 15') 
get()
put('eval')
get() 
put('position fen rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1') 
get()

Я получаю недопустимую синтаксическую ошибку в запятой после stdin=subprocess.PIPE

Любая помощь, исправляющая это или пробующая другой метод, ценится.

3 ответа

Линия

os.chdir('C:\Users\Michael\Downloads\stockfish-6-win\stockfish-6-win\Windows'

отсутствует закрывающая скобка. Вы, вероятно, хотели

stockfish_cmd = 'C:\\Users\\Michael\\Downloads\\stockfish-6-win\\stockfish-6-win\\Windows\\stockfish'
engine = subprocess.Popen(
    stockfish_cmd, universal_newlines=True,
    stdin=subprocess.PIPE, stdout=subprocess.PIPE)

Обратите внимание также на удвоение обратной косой черты, хотя я считаю, что в данном случае это просто безвредно.

У вас пропал ) в вашей третьей строке:

os.chdir('C:\Users\Michael\Downloads\stockfish-6-win\stockfish-6-win\Windows'

должно быть os.chdir('C:\Users\Michael\Downloads\stockfish-6-win\stockfish-6-win\Windows')

Я поместил скрипт для возврата оценки позиции Stockfish на github. Также обертка Python здесь.

Другие вопросы по тегам