在下面的程序中,我在Windows 7專業版64上運行,我嘗試允許用戶在需要時進行干預(通過內部while
循環)並導致外部while
循環重複一個動作。否則,內部while
循環會超時,該程序將只是繼續暢通無阻:在Python循環中重複超時或用戶輸入
import msvcrt
import time
decision = 'do not repeat' # default setting
for f in ['f1', 'f2', 'f3']:
print ('doing some prepartory actions on f')
while True: # outer while loop to allow repeating actions on f
print ('doing some more actions on f')
t0 = time.time()
while time.time() - t0 < 10: # inner while loop to allow user to intervene
if msvcrt.kbhit(): # and repeat actions by pressing ENTER if
if msvcrt.getch() == '\r': # needed or allow timeout continuation
decision = "repeat"
break
else:
break
time.sleep(0.1)
if decision == "repeat":
print ("Repeating f in the outer while loop...")
continue
else:
break
print ('doing final actions on f in the for loop')
但是,用戶輸入部分內環的(按ENTER鍵重複)不工作,我不知道爲什麼。我從here提供的解決方案中獲得了它的想法。 關於如何讓這個工作的任何想法?
'kbhit'和'getch'需要被連接到控制檯窗口的過程。如果你使用IDLE ,那麼該進程沒有控制檯 - 至少在使用pythonw.exe運行默認方式時,即使你使用連接的控制檯運行IDLE(例如,使用Win + R運行對話框運行py-3 -m idlelib'),我懷疑你希望用戶不得不切換到控制檯窗口來輸入輸入 – eryksun
無論如何,IDLE和其他IDE shell只是開發環境,如果你打算將它作爲控制檯腳本,如果沒有連接的控制檯(例如'open(「CONIN $」)'失敗),你可以模擬假的控制檯I/O函數以用於測試。如果它不是sup構成一個控制檯程序,然後使用GUI工具包創建自己的窗口並閱讀鍵盤輸入。 – eryksun