其他
一日一技:如何实现带timeout的input?
我们知道,在Python里面,可以使用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版本。大家有兴趣可以看一下。
参考资料
selectors: https://docs.python.org/3.8/library/selectors.html
[2]inputimeout: https://github.com/johejo/inputimeout/blob/master/inputimeout/inputimeout.py
END
我的爬虫架构课开课啦!
爬虫架构进阶就在这里
送未闻Code知识星球一年订阅!
未闻 Code·知识星球开放啦!
一对一答疑爬虫相关问题
职业生涯咨询
面试经验分享
每周直播分享
......
未闻 Code·知识星球期待与你相见~
一二线大厂在职员工
十多年码龄的编程老鸟
国内外高校在读学生
中小学刚刚入门的新人
在“未闻 Code技术交流群”等你来!
入群方式:添加微信“mekingname”,备注“粉丝群”(谢绝广告党,非诚勿扰!)