当前位置: 首页 > 科技观察

每日一技能:InputwithTimeout如何实现?

时间:2023-03-22 17:23:41 科技观察

我们知道在Python中,可以使用input来获取用户输入。例:但是有一个问题,如果你不输入任何东西,程序就会永远卡在这里。有没有办法设置输入超时?如果用户在一定时间内没有输入,则自动使用默认值。为了实现这个需求,在Linux/macOS系统下,我们可以使用选择器。这是Python自带的模块,不需要额外安装。对应代码如下:importsysimportselectorsdeftimeout_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)ifevents:key,_=events[0]returnkey.fileobj.readline().rstrip()else:sys.stdout.write('\n')returndefault运行效果如下图所示:selectors[1]模块可以使用系统级select实现IO复用。此代码来自inputtimeout[2]。除了Linux/macOS版本,还有Windows版本。如果你有兴趣,你可以看看。参考文献[1]选择器:https://docs.python.org/3.8/library/selectors.html[2]输入超时:https://github.com/johejo/inputimeout/blob/master/inputimeout/inputimeout.py