В следующей программе, которую я запускаю на Windows 7 Professional 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 - это только среда разработки. Если вы планируете использовать консольный скрипт , вы можете макетировать поддельные функции ввода-вывода консоли для использования при тестировании, когда нет подключенной консоли (например, 'open (« CONIN $ »)' fail). Если это не sup представляя собой консольную программу, затем используйте инструментарий GUI для создания собственного окна и чтения ввода с клавиатуры. – eryksun