在 Python 中,raw_input() 函數會暫停腳本的執行,直到使用者提供某種形式的輸入。但是,如果您想對此輸入設定時間限制以防止腳本無限期掛起,該怎麼辦?
實現時間限制
適用於基於 Unix 的系統的一種方法是使用 signal.alarm 函數。當以秒為單位的時間限制呼叫時,此函數會在指定的持續時間後引發 KeyboardInterrupt 異常,從而有效地跳過 raw_input() 呼叫。
跨平台解決方案
為了跨平台相容性或如果您使用的是 Windows,另一種方法是結合使用 threading.Timer 和 thread.interrupt_main .
import thread import threading def raw_input_with_timeout(prompt, timeout=30.0): print(prompt, end=' ') timer = threading.Timer(timeout, thread.interrupt_main) astring = None try: timer.start() astring = input(prompt) except KeyboardInterrupt: pass timer.cancel() return astring
請注意,此方法以相同的方式處理使用者啟動的輸入和逾時,對於兩種情況都傳回 None 。如果需要區分這些情況,可以修改程式碼,在發生逾時時設定一個標誌,並在 KeyboardInterrupt 處理程序中單獨處理。
特定於Windows 的實作
對於特定於Windows 的解決方案,您可以利用輪詢msvcrt.kbhit 的循環來檢查使用者輸入,同時監視時間確保強制執行超時。
import msvcrt import time def raw_input_with_timeout(prompt, timeout=30.0): print(prompt, end=' ') finishat = time.time() + timeout result = [] while True: if msvcrt.kbhit(): result.append(msvcrt.getche()) if result[-1] == '\r': return ''.join(result) time.sleep(0.1) else: if time.time() > finishat: return None
考慮預設值
如果您想避免在超時時傳回None,您可以修改程式碼以指定在這種情況下要傳回的替代預設值。
高級自訂
為了防止時間限制適用於單純打字速度較慢的用戶,您可以在每次輸入字元後重新計算超時,確保計時器僅如果輸入確實長時間暫停,則過期。
以上是如何在 Python 的 `raw_input()` 函數中設定使用者輸入的時間限制?的詳細內容。更多資訊請關注PHP中文網其他相關文章!