Сканирование нажатия клавиши в Python

Предположите, что все пользователи являются злонамеренными. Санируйте весь вход как можно скорее. Точка.

6
задан Abhijeet Rastogi 19 November 2009 в 11:36
поделиться

3 ответа

Я знаю, что это не полностью отвечает на ваш вопрос, но вы можете сделать следующее:

  1. Поместите программный логический код в функцию, скажем perform_actions . Вызовите его при запуске программы.
  2. После выполнения кода начните прослушивание прерывания .
    • То есть пользователь должен нажать ctrl + c вместо ctrl + r .
  3. При получении прерывания , подождите полсекунды; если ctrl + c снова нажата, то выйдите.
  4. В противном случае перезапустите код.

Таким образом, одно прерывание будет вести себя так, как вы хотите ctrl + r вести себя. Два быстрых прерывания завершают программу.

import time

def perform_actions():
    print("Hello.. again")

try:
    while True:
        perform_actions()
        try:
            while True: time.sleep(3600)
        except KeyboardInterrupt:
            time.sleep(0.5)
except KeyboardInterrupt:
    pass

Хорошим побочным эффектом использования сигнала (в данном случае SIGINT ) является то, что вы также перезапускаете сценарий другими способами, например, запустив kill - int .

4
ответ дан 17 December 2019 в 04:48
поделиться

Вы можете использовать Tkinter {требуется X: (}

#!/usr/bin/env python

from Tkinter import * # needs python-tk

root = Tk()

def hello(*ignore):
    print 'Hello World'

root.bind('<Control-r>', hello)
root.mainloop() # starts an X widget

Этот сценарий выводит на консоль Hello World , если вы нажмете ctrl + r

См. Также Tkinter keybindings . Другое решение, использующее GTK, можно найти здесь

3
ответ дан 17 December 2019 в 04:48
поделиться

в спящем режиме цикла for 3500 раз в течение 1 секунды, проверяя, нажималась ли клавиша каждый раз

# sleep for 3500 seconds unless ctrl+r is pressed
for i in range(3500):
    time.sleep(1)
    # check if ctrl+r is pressed
    # if pressed -> do something
    # otherwise go back to sleep
-2
ответ дан 17 December 2019 в 04:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: