我有一個連續的循環,修改數組中的數據並在每個循環中暫停一秒。這是沒有問題的..但我也需要在特定的按鍵輸入時將數組的特定部分打印到屏幕上,而不中斷以一秒間隔運行的連續循環。按鍵上的斷開循環
關於如何在不破壞循環的情況下獲得按鍵的任何想法?
我有一個連續的循環,修改數組中的數據並在每個循環中暫停一秒。這是沒有問題的..但我也需要在特定的按鍵輸入時將數組的特定部分打印到屏幕上,而不中斷以一秒間隔運行的連續循環。按鍵上的斷開循環
關於如何在不破壞循環的情況下獲得按鍵的任何想法?
您可以使用multiprocessing或threading庫來產生將運行連續循環的新進程/線程,並通過讀取用戶輸入來繼續主流程(將數組的特定部分打印到屏幕等)。
例子:
import threading
def loop():
for i in range(3):
print "running in a loop"
sleep(3)
print "success"
if __name__ == '__main__':
t = threading.Thread(target=loop)
t.start()
user_input = raw_input("Please enter a value:")
print user_input
t.join()
這看起來像是我所需要的。你有一個解釋這個問題的文檔,或者你至少可以解釋target = loop部分嗎? –
@StevenLutz'target = loop'意味着當調用'start()'函數時,會生成的線程將運行函數'loop()'。 join()意味着等待線程完成任務。 – alfasin
我現在對此有所瞭解。但我還有最後一個問題。看看這個代碼: 進口螺紋 導入時間 DEF迴路(): 計數= 0 而真: 計數+ = 1個 打印 「這是一個循環」 time.sleep(1) 打印「成功」 如果__name__ == '__main__': T = threading.Thread(目標=循環) t.start() 而真: USER_INPUT的raw_input =( 「請輸入一個值:」) 打印「用戶輸入:」+ user_input print「Current count:」+ count t.join() 如何讓count在線程之外傳遞?我得到一個計數沒有定義的錯誤。 –
你可能尋找select
模塊。 Here's關於等待I/O的教程。
對於做對按鍵的東西,你可以使用類似的目的:
import sys
from select import select
# Main loop
while True:
# Check if something has been input. If so, exit.
if sys.stdin in select([sys.stdin, ], [], [], 0)[0]:
# Absorb the input
inpt = sys.stdin.readline()
# Do something...
對不起,我想我沒有完全讀你的問題。這告訴你如何打破循環,但不知道如何保持一秒鐘的時間間隔。如果你做了其他的事情,你不會倒計時,所以你可能還需要產生一個新的過程或其他東西,正如另一個答案所建議的。雖然這個答案可能還是有一定價值的。 – Praveen
我從來沒有做過這樣的窗口系統之外,但這個帖子似乎相關:http://stackoverflow.com/問題/ 12175964/python-method-for-reading-keypress – user2027202827