![](/img/trans.png)
[英]How to manually take user input if user doesn't give voice input in python3
[英]Python3 prompt user input for a limited time, then enter a default if user doesn't respond
Python3:我試圖允許用戶在給定的時間內將響應輸入到輸入中,但是在給定的時間后,如果他們沒有輸入任何內容,我想中止輸入並為其分配一個默認值存儲輸入的變量,或者在給定時間段后將默認值輸入到輸入語句中。
我試過這個:
from threading import Timer
timeout = 2
t = Timer(timeout, print, ["\nSorry, time is up"])
t.start()
answer = input("You have 2 seconds to answer:")
t.cancel()
print(answer)
來自不同的堆棧溢出帖子,但問題是,即使在執行最后一行並打印answer
之后,解釋器仍會提示用戶輸入,這對我正在嘗試做的事情不起作用(基本上,一個命令行游戲需要在玩家不提供輸入時繼續運行,但在收到輸入時進行更新)。
做到這一點的最佳方法是什么? 我知道 python 並沒有真正的超時功能或類似的功能,但是有沒有辦法通過系統命令或模塊來實現這一點?
有幾種合理的方法(其中一些可能是 Unix 特定的):
kill
的subprocess
中的輸入。 (許多函數,包括subprocess.run
,都接受timeout
參數來自動執行此操作。)alarm
或類似方法向您自己的進程發送信號(並安裝引發異常的signal
處理程序)。close
正在讀取的描述符; 這聽起來很激烈,但通常說是可行的,只要您在使用dup2
恢復之前沒有意外open
關閉描述符上的文件。read
和select
等低級工具read
select
——不幸的是,這將禁用readline
類的好東西。無論如何,您必須決定如何處理超時前輸入的不完整但非空的輸入。 默認情況下,終端驅動程序可能會將它無形地轉移到下一個輸入提示。
使用select
調用可能是一種更簡單的方法。
import sys, select
print "You have ten seconds to answer!"
i, o, e = select.select( [sys.stdin], [], [], 10 )
if (i):
print "You said", sys.stdin.readline().strip()
else:
print "You said nothing!"
請參閱鍵盤輸入超時?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.