Передача аргументов слушателю pynput
Я использую pynput слушатель, чтобы ловить нажатия клавиш с клавиатуры, но проблема в том, что мне нужно передать параметр в функции on_press и on_release, и я просто не могу понять, как это сделать. Вы можете видеть в коде, мне нужно передать клиентский сокет, чтобы я мог отправить ему ключ, который был нажат / отпущен.
def handle_keyboard_events(self, client_socket):
keyboard_listener = keyboard.Listener(on_press=self.on_key_press, on_release=self.on_key_release)
keyboard_listener.start()
def on_key_press(self, key):
key_press_command = KeyPress(key)
self.send_message(key_press_command, True, client_socket)
def on_key_release(self, key):
key_release_command = KeyRelease(key)
self.send_message(key_release_command, True, client_socket)
1 ответ
я вижу, вы используете
self
так что ты внутри
class
.
почему вы не используете в своем конструкторе?
# update your constructor with self.client_socket
def __init__(client_socket, **other_args_of_yours):
# use this object variable when you activate key listener
self.client_socket = client_socket
или добавить
self.client_socket = client_socket
в
handle_keyboard_events()
метод:
def handle_keyboard_events(self, client_socket):
self.client_socket = client_socket # <----- update
keyboard_listener = keyboard.Listener(
on_press=self.on_key_press,
on_release=self.on_key_release
)
keyboard_listener.start()
и использовать
self.client_socket
в и методы
def on_key_press(self, key):
key_press_command = KeyPress(key)
self.send_message(key_press_command, True, self.client_socket) # <--- update
def on_key_release(self, key):
key_release_command = KeyRelease(key)
self.send_message(key_release_command, True, self.client_socket) # <--- update
ИЛИ ЖЕ
если ты действительно хочешь пройти
client_socket
на ваш
press
и
release
методы, вы можете попробовать это:
def handle_keyboard_events(self, client_socket):
# use lambda to pass the client socket
# with this method, after you get the `key` you can pass additional params to on_press and on_release
keyboard_listener = keyboard.Listener(
on_press=lambda key: self.on_key_press(key, client_socket), # <--- client socket passed
on_release=lambda key: self.on_key_release(key, client_socket) # <--- client socket passed
)
keyboard_listener.start()
# add client socket as new arg
def on_key_press(self, key, client_socket):
key_press_command = KeyPress(key)
self.send_message(key_press_command, True, client_socket) # from params
# add client socket as new arg
def on_key_release(self, key, client_socket):
key_release_command = KeyRelease(key)
self.send_message(key_release_command, True, client_socket) # from params
и вы готовы к работе.