LINUX.ORG.RU

Перехват нажатия клавиш в консоли

 , ,


0

1

Хотелось бы пару хоткеев своих добавить, например по Ctrl+K выводить некое сообщение. Это без curses реально что-ли?
Юзаю python.
Да и всегда хотел узнать как перехватывать Ctrl+C, чтобы прибивать все треды.

★★★★

Последнее исправление: FIL (всего исправлений: 1)

Меня как-то окончательно затрахал ncurses и я написал свою либу. Примерно это выглядит так. Я ещё использую blessings.Terminal.

SPECIAL = Enum("ESC BSPACE ENTER CTRLC".split())
ARROW = Enum("UP DOWN LEFT RIGHT".split())

def myinput(timeout=None):
  stdin = sys.stdin
  special = False
  while True:
    try:
      r, _, _ = select([stdin], [], [], timeout)
      if not r:
        yield None
        continue
      ch = os.read(stdin.fileno(), 1)
    except InterruptedError:  # "[Errno 4] Interrupted system call"
      continue
    ch = ch.decode()
    if ch == '\x1b':
      if special:
        yield SPECIAL.ESC
      else:
        special = True
    elif ch == '[':
      if not special:
        yield ch
    else:
      if special:
        special = False
        if   ch == 'A': yield ARROW.UP
        elif ch == 'B': yield ARROW.DOWN
        elif ch == 'C': yield ARROW.RIGHT
        elif ch == 'D': yield ARROW.LEFT
      else:
        if   ch == '\x7f':
          yield SPECIAL.BSPACE
        elif ch == '\x03':
          os.kill(0, signal.SIGINT)
          # yield SPECIAL.CTRLC
        elif ch == '\r':
          # yield SPECIAL.ENTER
          yield '\n'
        else:
          yield ch

true_admin ★★★★★
()

Да и всегда хотел узнать как перехватывать Ctrl+C, чтобы прибивать все треды.

Есть модуль signal в стандартной библиотеке, это то, что тебе нужно.

Kilte ★★★★★
()
Ответ на: комментарий от true_admin

Да, пока не нет нужды освобождать ресурсы.

Kilte ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.