Использование прослушивателя Pynput для приостановки и продолжения сценария - PullRequest
0 голосов
/ 25 сентября 2019

Итак, у меня есть это:

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.

1 Ответ

0 голосов
/ 26 сентября 2019
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 ожидает ввода.

...