我試圖找出如何創建一個小的Python腳本,可以採取以下參數的計時器:如何閱讀鍵盤輸入一個字符,在一個時間與Python
- 提示 - 串
- 時間到停止
最後一個是字符我可以輸入數目的程序停止接受字符並開始處理該輸入之前之前等待作爲一個整數
我試圖找出如何創建一個小的Python腳本,可以採取以下參數的計時器:如何閱讀鍵盤輸入一個字符,在一個時間與Python
最後一個是字符我可以輸入數目的程序停止接受字符並開始處理該輸入之前之前等待作爲一個整數
好吧,我已經實現了它:D。
#!/usr/bin/env python
import sys
from select import select
def main(argv):
timeout = 3
prompt = '> '
max_chars = 3
# set raw input mode if relevant
# it is necessary to make stdin not wait for enter
try:
import tty, termios
prev_flags = termios.tcgetattr(sys.stdin.fileno())
tty.setraw(sys.stdin.fileno())
except ImportError:
prev_flags = None
buf = ''
sys.stderr.write(prompt)
while True: # main loop
rl, wl, xl = select([sys.stdin], [], [], timeout)
if rl: # some input
c = sys.stdin.read(1)
# you will probably want to add some special key support
# for example stop on enter:
if c == '\n':
break
buf += c
# auto-output is disabled as well, so you need to print it
sys.stderr.write(c)
# stop if N characters
if len(buf) >= max_chars:
break
else:
# timeout
break
# restore non-raw input
if prev_flags is not None:
termios.tcsetattr(sys.stdin.fileno(), termios.TCSADRAIN, prev_flags)
# and print newline
sys.stderr.write('\n')
# now buf contains your input
# ...
if __name__ == "__main__":
main(sys.argv[1:])
這是相當不完整的;我只是放了幾個值來測試它。解釋幾句:
curses
,end_time
),然後通過end_time - current_time
秒作爲超時到select()
,我實際上已經忘記提及我需要一種方法來隱藏用戶的輸入,但它看起來像您的原始模式對我來說是這樣,所以這一切都可以工作。非常感謝! –
很高興幫助。雖然我不確定它們是否不在Windows中輸出,但如果這可能是相關的。 –
沒關係。無論如何,這是純粹的Linux項目。 –
錯誤,'select()'可以佔第三項。假設每次輸入都會返回(繼續循環執行),您可以計算字符數,並停止或運行另一個「select()」調用。 –
真的嗎?抱歉。我閱讀選擇的文檔,但我沒有注意到 –
我應該給你提供一個簡單的例子還是你想嘗試一下嗎? :) –