【问题标题】:Passing arguments to a pynput listener将参数传递给 pynput 侦听器
【发布时间】:2019-03-29 02:19:18
【问题描述】:

我正在使用 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)

【问题讨论】:

    标签: python-2.7 parameter-passing listener event-listener pynput


    【解决方案1】:

    我看到你正在使用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
    

    你准备好了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-05
      • 2010-09-20
      • 1970-01-01
      • 2013-05-23
      • 2015-12-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多