【问题标题】:Using Pynput listener to pause and continue a script使用 Pynput 侦听器暂停和继续脚本
【发布时间】:2019-09-26 18:36:02
【问题描述】:

所以我有这个:

from pynput.keyboard import Key, Controller, Listener
keyboard = Controller()
import random
import time

def mainfunction():
    key1 = input("type first key to be repeated: ")
    key2 = input("second.. : ")
    key3 = input("last .. : ")
    x = 0
    while x < 10000:
        keyboard.press(key1)
        keyboard.release(key1)
        time.sleep((random.randint(1, 8))/10)
        keyboard.press(key2)
        keyboard.release(key2)
        time.sleep((random.randint(1, 8))/10)
        keyboard.press(key3)
        keyboard.release(key3)
        time.sleep((random.randint(1, 8))/10)
        x = x + 1


mainfunction()

我希望它在双击任意字母时暂停并继续,但不知道如何使用pynput.listener

【问题讨论】:

    标签: listener pynput


    【解决方案1】:
    from pynput.keyboard import Key, Controller, Listener
    keyboard = Controller()
    from threading import Thread
    import random
    import time
    
    def listen(key):
        global keyletter
        global key4
        keydata = str(key)
    
        try:
            if keydata.replace("'", "") == str(key4):
                keyletter = keydata.replace("'", "")
        except:
            #at Programstart key4 is not defined jet and would lead to an Error
            pass
    
    
    def mainThread():
        global keyletter
        global key4
        key1 = input("type first key to be repeated: ")
        key2 = input("second.. : ")
        key3 = input("last.. : ")
        key4 = input("interrupt.. ")
        bool_interrupt = False
        x = 0
        while x < 10000:
    
            if keyletter == str(key4):
                if bool_interrupt == False:
                    bool_interrupt = True
                    time.sleep(0.5)
                    keyletter = ""
                else:
                    bool_interrupt = False
                    time.sleep(0.5)
                    keyletter = ""
            if bool_interrupt == False:
                keyboard.press(key1)
                keyboard.release(key1)
                time.sleep((random.randint(1, 8))/10)
                keyboard.press(key2)
                keyboard.release(key2)
                time.sleep((random.randint(1, 8))/10)
                keyboard.press(key3)
                keyboard.release(key3)
                time.sleep((random.randint(1, 8))/10)
                x = x + 1
    
    def listenerThread():
        global keyletter
        keyletter = ""
        with Listener(on_press=listen) as l:
            l.join()
    
    myThread1 = Thread(target=mainThread)
    myThread2 = Thread(target=listenerThread)
    
    myThread1.start()
    myThread2.start()
    

    这可能过于复杂,但它确实有效。 我使用第二个线程,因为侦听器在输入之前停止代码。 这样,mainThread 循环,而 listenerThread 等待输入。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-12
      • 1970-01-01
      • 2019-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-08
      • 2012-07-18
      相关资源
      最近更新 更多