Вяленая рыба и питон
Я пытаюсь написать скрипт, использующий 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')
2016-03-23 15:51