我正在尝试制作一个每 30 秒截取一次屏幕截图的脚本。
这就是我现在拥有的:
def on_click(x, y, button, pressed):
global path
if pressed:
takeScreenshoot(path)
print('ScreenShoot Taken')
我尝试过的事情。
import time
while True: # Change for a variable or a toggle
time.sleep(30)
takeScreenshoot(path)
print('ScreenShoot Taken')
但是现在正因为如此,我的代码的下一部分无法访问
import time
while True: # Change for a variable or a toggle
time.sleep(30)
takeScreenshoot(path)
print('ScreenShoot Taken')
这可能是你可以做的事情,
其实很简单
import time
while True:
takeScreenshot(path)
time.sleep(30)
print('screenshot taken')
如果您想在一段时间后中断它,可以使用索引变量来代替,这个永远运行的简单 while 代码将起作用。
from threading import Thread
import time
def f(x):
while True:
time.sleep(2.1)
print(f'ScreenShoot Taken: {x}')
def g(x):
for i in range(5):
time.sleep(2.2)
print(f'Ho Ho Ho: {x}')
f = Thread(target=f, args=["bla"])
f.daemon = True
f.start()
g("bla")
在此示例中,两个功能同时工作。您当然可以用您的代码替换 g() 。如果不将线程设置为
daemon
,程序不会退出,因为线程函数f()会无限运行。如果设置为daemon,则主代码退出时线程就会退出。
以下是您可以使用的 Python 代码: 点击“Print Screen”按钮进行打印,点击“Esc”停止循环
import sys
from pprint import pprint as pp
from pynput.keyboard import Key, Listener, Controller
from PIL import Image, ImageGrab
import click
click.disable_unicode_literals_warning = True
def print_screen(fname, itype="JPEG"):
img = ImageGrab.grab()
img.save(fname, itype, quality=100, subsampling=0)
@click.command()
@click.option('-f', '--file_name', default = 'snap', help = 'File prefix.', required=True )
def start_loop(**kwargs):
fn=kwargs.get('file_name')
assert fn
def on_press(key):
global pid
if key == Key.enter:
print('{0} pressed'.format(key))
imgfn='%s_%03d.jpg' % (fn,pid)
print_screen(imgfn)
print('Screenshot %d is saved to "%s"' % (pid, imgfn))
pid +=1
def on_release(key):
if key == Key.esc:
# Stop listener
return False
with Listener(
on_press=on_press,
on_release=on_release) as listener:
listener.join()
if __name__ == "__main__":
pid=0
start_loop()