我正在尝试使用lichess-bot为lichess创建一个CLI接口。
链接:https://github.com/ShailChoksi/lichess-bot
移动是通过创建一个扩展MinimalEngine的类,并给它一个返回要移动的搜索方法来完成的。
例如,这是有效的,我测试了它的舔,它做了一个随机的合法行动。
class RandomMove(ExampleEngine):
def search(self, board, *args):
return PlayResult(random.choice(list(board.legal_moves)), None)我的计划是使用get ()替换此功能,以便从播放机获得一个uci移动字符串,然后让机器人播放该移动。
然而,这一点就打破了它。
class RandomMove(ExampleEngine):
def search(self, board, *args):
mv = input("Give me a move")
return PlayResult(random.choice(list(board.legal_moves)), None)当我在代码中使用input()运行时,会重复这个输出:
INFO Backing off play_game(...) for 19.9s (EOFError: EOF when reading a line) 如果从搜索方法内部打印(sys.stdin),则得到以下输出:
<_io.TextIOWrapper name=21 mode='r' encoding='UTF-8'>但是,如果我从自己的python文件中打印(sys.stdin),就会得到:
stdin <_io.TextIOWrapper name='<stdin>' mode='r' encoding='utf-8'>我想,lichess bot必须以某种方式覆盖/重定向stdin,我的问题是,如果是这样的话,我如何仍然读取用户输入,是否有一些技巧可以重新建立stdin,然后在完成时将其重新设置,或者在一个单独的线程/进程上运行我的输入()?
发布于 2022-10-28 11:17:20
试试这个:
class RandomMove(ExampleEngine):
def search(self, board, *args):
mv = input("Give me a move")
return PlayResult(chess.Move.from_uci(mv), None)实际上,您的函数必须返回PlayResult(chess.Move)类型。
https://stackoverflow.com/questions/73956272
复制相似问题