/ / Stop keyboard.record () - Funktion bei jedem Tastendruck in Python - Python, Protokollierung, Tastatur

Stoppen Sie die keyboard.record () Funktion bei jedem Tastendruck in Python - Python, Logging, Tastatur

ich habe das gefunden keyboard Modul in Python, das verwendet wird, um Tastaturereignisse (von dem, was ich hauptsächlich habe) zu protokollieren keyboard.record(), der einen String als Parameter verwendet und angibt, bei welchem ​​Tastendruck die Funktion beendet werden soll.

Also meine Frage ist ... gibt es eine Möglichkeit, die Funktion bei jedem Tastendruck zu stoppen? Soweit ich weiß, hat das Modul kein spezielles Schlüsselwort, das auf so etwas hinweisen würde.

Als hätte ich das versucht

keys_pressed = keyboard.record(until="any")

Aber das verursacht einen Fehler.

Antworten:

1 für die Antwort № 1

Ich sehe keinen Sinn darin, keyboard.record () zu verwenden, wenn Sie nur beim ersten Tastendruck anhalten (und aufnehmen) müssen.

Stattdessen könnten Sie keyboard.read_key () wie folgt verwenden:

import keyboard
k = keyboard.read_key()  # in my python interpreter, this captures "enter up"
k = keyboard.read_key()  # so repeat the line if in the python interpreter

0 für die Antwort № 2

Nach dem Durchstöbern des Quellcodes sieht es so aus, als wäre dies nicht möglich.

def record(until="escape"):
"""
Records all keyboard events from all keyboards until the user presses the
given key combination. Then returns the list of events recorded, of type
`keyboard.KeyboardEvent`. Pairs well with
`play(events)`.

Note: this is a blocking function.
Note: for more details on the keyboard hook and events see `hook`.
"""
recorded = []
hook(recorded.append)
wait(until)
unhook(recorded.append)
return recorded

Der Parameter until wird in übergeben wait(). Somit, wait() muss Code haben, um einen willkürlichen Tastendruck zu handhaben, den es nicht tut.

def wait(combination=None):
"""
Blocks the program execution until the given key combination is pressed or,
if given no parameters, blocks forever.
"""
wait, unlock = _make_wait_and_unlock()
if combination is not None:
hotkey_handler = add_hotkey(combination, unlock)
wait()
remove_hotkey(hotkey_handler)

Letztendlich gibt es keinen Quellcode, der für so etwas geeignet ist keyboard.record(until="any")Sie müssen also eine Problemumgehung finden Wie bringe ich Python dazu, auf eine gedrückte Taste zu warten?. Wenn Sie jedoch den beliebigen Schlüssel aufzeichnen müssen, den Sie zum Stoppen der Aufzeichnung verwendet haben, verwenden Sie die Problemumgehung von J-L:

import keyboard
k = keyboard.read_key()  # in my python interpreter, this captures "enter up"
k = keyboard.read_key()  # so repeat the line if in the python interpreter

0 für die Antwort № 3

Sie können eine Funktion erstellen, die für alle Tasten einen Haken setzt.

import keyboard

def record_until(any_key=False):
recorded = []

keyboard.hook(recorded.append) # need this to capture terminator

wait, unlock = keyboard._make_wait_and_unlock()

if any_key:
hook = keyboard.hook(unlock)

wait()

try:
keyboard.remove_hotkey(hook)
except ValueError: pass

return recorded


record_until(any_key=True)