将参数传递给pynput监听器

4

我正在使用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个回答

0

我看到你正在使用self,所以你在一个class内部。

为什么你的构造函数不使用self.client_socket = client_socket呢?

# 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

或者在 handle_keyboard_events() 方法中添加 self.client_socket = client_socket

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()

pressrelease 方法中使用 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 传递给你的 pressrelease 方法,你可以尝试这样做:

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

然后你就可以开始了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接