【发布时间】:2022-11-10 08:00:07
【问题描述】:
我正在尝试使用 lichess-bot 为 lichess 创建一个 CLI 界面
链接:https://github.com/ShailChoksi/lichess-bot
移动是通过创建一个扩展 MinimalEngine 的类并给它一个返回移动的搜索方法来进行的。
例如,这很有效,我在 lichess 上对其进行了测试,它是一个随机的合法动作。
class RandomMove(ExampleEngine):
def search(self, board, *args):
return PlayResult(random.choice(list(board.legal_moves)), None)
我的计划是使用 input() 替换此功能,以从玩家那里获取 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)
如果我从搜索方法中 print(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 必须以某种方式覆盖/重定向标准输入,我的问题是,如果是这种情况,我怎么还能读取用户输入,是否有一些技巧可以重新建立标准输入,然后在我完成时将其设置回来,或者可能有什么在单独的线程/进程上运行我的 input() ?
【问题讨论】: