首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当stdin被重定向时如何使用stdin?

当stdin被重定向时如何使用stdin?
EN

Stack Overflow用户
提问于 2022-10-05 05:39:36
回答 1查看 40关注 0票数 0

我正在尝试使用lichess-bot为lichess创建一个CLI接口。

链接:https://github.com/ShailChoksi/lichess-bot

移动是通过创建一个扩展MinimalEngine的类,并给它一个返回要移动的搜索方法来完成的。

例如,这是有效的,我测试了它的舔,它做了一个随机的合法行动。

代码语言:javascript
复制
class RandomMove(ExampleEngine):
    def search(self, board, *args):
        return PlayResult(random.choice(list(board.legal_moves)), None)

我的计划是使用get ()替换此功能,以便从播放机获得一个uci移动字符串,然后让机器人播放该移动。

然而,这一点就打破了它。

代码语言:javascript
复制
class RandomMove(ExampleEngine):
    def search(self, board, *args):
        mv = input("Give me a move")
        return PlayResult(random.choice(list(board.legal_moves)), None)

当我在代码中使用input()运行时,会重复这个输出:

代码语言:javascript
复制
 INFO     Backing off play_game(...) for 19.9s (EOFError: EOF when reading a line) 

如果从搜索方法内部打印(sys.stdin),则得到以下输出:

代码语言:javascript
复制
<_io.TextIOWrapper name=21 mode='r' encoding='UTF-8'>

但是,如果我从自己的python文件中打印(sys.stdin),就会得到:

代码语言:javascript
复制
stdin <_io.TextIOWrapper name='<stdin>' mode='r' encoding='utf-8'>

我想,lichess bot必须以某种方式覆盖/重定向stdin,我的问题是,如果是这样的话,我如何仍然读取用户输入,是否有一些技巧可以重新建立stdin,然后在完成时将其重新设置,或者在一个单独的线程/进程上运行我的输入()?

EN

回答 1

Stack Overflow用户

发布于 2022-10-28 11:17:20

试试这个:

代码语言:javascript
复制
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)类型。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73956272

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档