Подскажите, как сделать горячую клавишу для выключения скрипта

Рейтинг: 0Ответов: 2Опубликовано: 13.06.2023

Подскажите, как сделать горячую клавишу для выключения скрипта

Например, вот рабочий скрипт

while True:
    zadacha1()
    zadacha2()
    zadacha3()
    zadacha4()

и вот надо как то сделать, чтобы, например, в любое время и в любой функции выполнения скрипта сработала клавиша например F5 что бы скрипт выключится и по возможности еще добавить клавишу F6 пауза

Ответы

▲ 0

На основе вашей задачи я реализовал воспроизводимый пример. Здесь мы реализуем две глобальные переменные paused и exit_loop, далее мы создаём для них функции, которые позже назначим как горячие клавиши через модуль keyboard, для проверки я реализовал метод zadacha1() которая просто возвращает отметку от времени, код выглядит следующим образом:

import keyboard
import datetime
import time

def zadacha1():
    #print hello with date and time now
    time.sleep(1)
    print("отметка времени: ", datetime.datetime.now())

paused = False
exit_loop = False

def pause_loop():
    global paused
    paused = not paused
    if paused:
        print("\npaused = True\n")
    else:
        print("\npaused = False\n")

def exit_program():
    global exit_loop
    exit_loop = True
    print("\nexit_loop = True\n")        

# Устанавливаем сочетание клавиш для паузы
keyboard.add_hotkey('f5', pause_loop)
keyboard.add_hotkey('f6', exit_program)

while True:
    if not paused:
        # Ваш код для выполнения задачи
        zadacha1()
        if exit_loop:
            print('\nПрограмма завершена\n')
            break

Результат:

отметка времени:  2023-06-13 08:56:46.483409
отметка времени:  2023-06-13 08:56:47.484627
отметка времени:  2023-06-13 08:56:48.485523
отметка времени:  2023-06-13 08:56:49.485673
отметка времени:  2023-06-13 08:56:50.485943

paused = True

отметка времени:  2023-06-13 08:56:51.486116

paused = False

отметка времени:  2023-06-13 08:56:56.388918
отметка времени:  2023-06-13 08:56:57.389715
отметка времени:  2023-06-13 08:56:58.390017
отметка времени:  2023-06-13 08:56:59.390176
отметка времени:  2023-06-13 08:57:00.391006
отметка времени:  2023-06-13 08:57:01.391129

exit_loop = True

отметка времени:  2023-06-13 08:57:02.391734

Программа завершена

Сначала мы нажали на клавишу f6 воспроизведя паузу, учитывайте что после нажатия инструкция будет воспроизведена последний раз. Далее мы нажимаем f5 для завершения программы путём вызова break, после нажатия так же цикл будет воспроизведен один раз.

▲ -1
import sys
import keyboard
while True:
    if(keyboard.is_pressed('f5'):
        sys.exit(0)
    if(keyboard.is_pressed('f6'):
        keyboard.wait('f6')
    zadacha1()
    zadacha2()
    zadacha3()
    zadacha4()