網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
Python?input輸入超時(shí)選擇默認(rèn)值自動(dòng)跳過(guò)問(wèn)題_python
作者:weixin_46909456 ? 更新時(shí)間: 2023-05-29 編程語(yǔ)言Python input 等待鍵盤輸入,超時(shí)選擇默認(rèn)值,釋放input,之后重新進(jìn)入等待鍵盤輸入狀態(tài),直到用戶輸入可用數(shù)據(jù)。
一、調(diào)用 func_timeout 模塊實(shí)現(xiàn)超時(shí)控制
1、安裝 func_timeout 庫(kù)
pip install func_timeout
2、使用 func_timeout 庫(kù)
func_set_timeout 裝飾器設(shè)置超時(shí)時(shí)間,程序超時(shí)后會(huì)拋出func_timeout.exceptions.FunctionTimedOut異常
import func_timeout @func_timeout.func_set_timeout(3) #超時(shí)時(shí)間為 3s def Input_task(): print('請(qǐng)輸入:') return input()
3、使用 try…except 捕捉異常
def task(): try: s = Input_task() print('成功輸入') except func_timeout.exceptions.FunctionTimedOut as e: s = '默認(rèn)值!' print(s)
4、問(wèn)題
下面的代碼中將 task() 函數(shù)放進(jìn) while 循環(huán),出現(xiàn)超時(shí)異常后,手動(dòng)輸入無(wú)效
import func_timeout from func_timeout import func_set_timeout timeout = 4 @func_set_timeout(timeout) def Input_task(): print('請(qǐng)輸入:') return input() def task(): try: s = Input_task() print('成功輸入') run_flag = False except func_timeout.exceptions.FunctionTimedOut as e: s = '默認(rèn)值!' run_flag = True print(s) return run_flag #如果成功輸入將退出 while 循環(huán) run_flag = True while run_flag: run_flag = task()
運(yùn)行結(jié)果:
小結(jié):該模塊只能進(jìn)行一次超時(shí)控制,當(dāng)程序第一次拋出超時(shí)異常后,即使用戶輸入數(shù)據(jù)也無(wú)濟(jì)于事
二、使用 Timer 定時(shí)器和模擬鍵盤輸入實(shí)現(xiàn)超時(shí)控制
1、Timet 定時(shí)器
是Thead類的一個(gè)子類,可用于在指定時(shí)間間隔后啟動(dòng)線程
# 導(dǎo)入線程模塊 import threading timer = threading.Timer(interval, function, args=None, kwargs=None)
參數(shù)介紹:
-
interval
— 定時(shí)器間隔,間隔多少秒之后啟動(dòng)定時(shí)器任務(wù)(單位:秒); -
function
— 線程函數(shù); -
args
— 線程參數(shù),可以傳遞元組類型數(shù)據(jù),默認(rèn)為空(缺省參數(shù)); -
kwargs
— 線程參數(shù),可以傳遞字典類型數(shù)據(jù),默認(rèn)為空(缺省參數(shù))
2、模擬鍵盤輸入
(1) PyUserInput模塊安裝
pip install PyUserInput
python3.5的PyMouse和PyKeyboard模塊都集成到了PyUserInput模塊中
(2) 鍵盤實(shí)例化
from pykeyboard import PyKeyboard k = PyKeyboard()#鍵盤的實(shí)例 k
(3) 鍵盤操作說(shuō)明
單個(gè)按鍵
k.type_string(‘Hello, World!') #模擬鍵盤輸入字符串 k.press_key(‘H') #模擬鍵盤按H鍵 k.release_key(‘H') #模擬鍵盤松開H鍵 k.tap_key(“H”) #模擬點(diǎn)擊H鍵 k.tap_key(‘H',n=2,interval=5) #模擬點(diǎn)擊H鍵,2次,每次間隔5秒 k.tap_key(k.function_keys[5]) #點(diǎn)擊功能鍵F5 k.tap_key(k.numpad_keys[5],3) #點(diǎn)擊小鍵盤5,3次
組合鍵(例如同時(shí)按alt+tab鍵盤 )
k.press_key(k.alt_key) #按住alt鍵 k.tap_key(k.tab_key) #點(diǎn)擊tab鍵 k.release_key(k.alt_key) #松開alt鍵
3、代碼實(shí)現(xiàn)
from pykeyboard import PyKeyboard import threading def Input_simulate(timeout): if not Input_event.is_set(): key = PyKeyboard()#鍵盤的實(shí)例 key key.type_string('no input') #模擬鍵盤輸入字符串 key.press_key(key.enter_key) #模擬按下 ENTER 鍵 key.release_key(key.enter_key) #模擬釋放 ENTER 鍵 global timer #將定時(shí)器的句柄定義成一個(gè)全局變量,這樣做的好處是,創(chuàng)建的定時(shí)器進(jìn)程和實(shí)例不會(huì)堆積,而是覆蓋,避免不必要的內(nèi)存占用。 Input_event.clear() timer = threading.Timer(timeout, Input_simulate, args=(timeout,)) timer.start() msg = input('請(qǐng)輸入你的信息:') if msg == 'no input': pass else: print(msg) #打印輸入信息 timer.cancel() #取消定時(shí)器的調(diào)度,當(dāng)用戶輸入數(shù)據(jù)時(shí)將停止計(jì)時(shí),程序退出運(yùn)行 if __name__ == '__main__': Input_event = threading.Event() Input_event.set() Input_simulate(5)
運(yùn)行結(jié)果:
小結(jié):該代碼等待鍵盤輸入,超時(shí)選擇默認(rèn)值,釋放input,之后重新進(jìn)入等待鍵盤輸入狀態(tài),直到用戶輸入可用數(shù)據(jù)。
總結(jié)
原文鏈接:https://blog.csdn.net/weixin_46909456/article/details/124919332
- 上一篇:沒有了
- 下一篇:沒有了
相關(guān)推薦
- 2022-04-06 通過(guò)實(shí)例詳解C語(yǔ)言函數(shù)返回值_C 語(yǔ)言
- 2022-09-08 Python列表list的詳細(xì)用法介紹_python
- 2022-11-28 詳解如何使用C++寫一個(gè)線程安全的單例模式_C 語(yǔ)言
- 2022-06-14 C#獲取指定目錄下某種格式文件集并備份到指定文件夾_C#教程
- 2022-05-16 深入理解docker鏡像的分層(小白必看)_docker
- 2022-10-02 Android實(shí)現(xiàn)倒計(jì)時(shí)的方案梳理_Android
- 2022-07-09 python處理excel文件之xlsxwriter?模塊_python
- 2023-02-02 Nginx?error_page自定義錯(cuò)誤頁(yè)面設(shè)置過(guò)程_nginx
- 欄目分類
-
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過(guò)濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支