一日一技:如何实现带timeout的input?

共 1404字,需浏览 3分钟

 ·

2022-07-06 09:06

我们知道,在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版本。大家有兴趣可以看一下。

参考资料

[1] 

selectors: https://docs.python.org/3.8/library/selectors.html

[2] 

inputimeout: https://github.com/johejo/inputimeout/blob/master/inputimeout/inputimeout.py

往期推荐
1、Python比较两个日期的多种方法!
2、大一女生废话编程爆火!懂不懂编程的看完都拴Q了
3、用Python制作一个相册播放器(附源码)
4、Cython 是什么?为什么会有 Cython?
5、Python 中的万能之王 Lambda 函数
点击关注公众号,阅读更多精彩内容
浏览 25
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报