美图齐众专注资阳网站设计 资阳网站制作 资阳网站建设
资阳网站建设公司服务热线:028-86922220

网站建设知识

十年网站开发经验 + 多家企业客户 + 靠谱的建站团队

量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决

一日一技:如何实现带Timeout的Input?

但有一个问题,如果你什么都不输入,程序会永远卡在这里。有没有什么办法,可以给input设置超时时间呢?如果用户在一定时间内不输入,就自动使用默认值。

要实现这个需求,在Linux/macOS系统下面,我们可以使用selectors。这是Python自带的模块,不需要额外安装。对应的代码如下:

import sys
import selectors

def timeout_input(msg, default='', timeout=5):
sys.stdout.write(msg)
sys.stdout.flush()
sel = selectors.DefaultSelector()
sel.register(sys.stdin, selectors.EVENT_READ)
events = sel.select(timeout)
if events:
key, _ = events[0]
return key.fileobj.readline().rstrip()
else:
sys.stdout.write('\n')
return default

运行效果如下图所示:

selectors[1]这个模块,可以使用系统层级的select,实现IO多路复用。

这段代码来自inputimeout[2]。上面除了Linux/macOS版本外,还有Windows版本。大家有兴趣可以看一下。

参考资料

[1] selectors: https://docs.python.org/3.8/library/selectors.html

[2] inputimeout: https://github.com/johejo/inputimeout/blob/master/inputimeout/inputimeout.py


当前名称:一日一技:如何实现带Timeout的Input?
本文地址:http://zsjierui.cn/article/dhiehoh.html

其他资讯