Я пытаюсь запрограммировать макрос для BTD6, используя Python с pydirectinput и pyautogui. До сих пор все, что связано с фактическими исходными данными, шло по плану. У меня возникают проблемы при попытке реализовать способ выхода из цикла while, находясь вне терминала. Если у вас есть решение, пожалуйста, дайте мне знать. Вот исходный код:
Это сработает в большинстве случаев, но в моей программе используется несколько значений time.sleep(duration). Из-за этого программа почти никогда не реагирует на нажатие клавиш для выхода.
Я тоже пробовал:
try:
while True:
do_somthing()
time.sleep(10)
except KeyboardInterrupt:
pass
Это работает, но не так, как хотелось бы. Цикл while прервется при нажатии crtl+c даже при работающем time.sleep(), но только тогда, когда вы находитесь в терминале. Вне терминала crtl+c ничего не делает, чтобы остановить его.
Опять же, я ищу надежный способ выйти из цикла while с помощью нажатия клавиши вне терминала.
Я пытаюсь запрограммировать макрос для BTD6, используя Python с pydirectinput и pyautogui. До сих пор все, что связано с фактическими исходными данными, шло по плану. У меня возникают проблемы при попытке реализовать способ выхода из цикла while, находясь вне терминала. Если у вас есть решение, пожалуйста, дайте мне знать. Вот исходный код: [code]import pyautogui import pydirectinput import keyboard import time
print("Press the spacebar to begin") keyboard.wait("space") time.sleep(1)
#This is the while loop I want to break out of with a key press. while True:
click((825, 925)) click((1350, 950)) click((1400, 550)) click((630, 400)) click((1300, 450)) time.sleep() click((965, 750)) summon_tower(monkey_village, (1582, 673)) upgrade_tower((1582, 673), [2, 0, 2]) summon_tower(sniper_monkey, (1527, 595)) upgrade_tower((1527, 595), [0, 2, 4]) summon_tower(alchemist, (1603, 592)) upgrade_tower((1603, 592), [4, 2, 0]) click((1830, 1000), 2) time.sleep(300) click((960, 900)) click((725, 850)) [/code] Вот что я пробовал: [code]while True: if keyboard.is_pressed("a"): break [/code] Это сработает в большинстве случаев, но в моей программе используется несколько значений time.sleep(duration). Из-за этого программа почти никогда не реагирует на нажатие клавиш для выхода. Я тоже пробовал: [code]try: while True: do_somthing() time.sleep(10)
except KeyboardInterrupt: pass [/code] Это работает, но не так, как хотелось бы. Цикл while прервется при нажатии crtl+c даже при работающем time.sleep(), но только тогда, когда вы находитесь в терминале. Вне терминала crtl+c ничего не делает, чтобы остановить его. Опять же, я ищу надежный способ выйти из цикла while с помощью нажатия клавиши вне терминала.