Делать скриншоты через произвольные промежутки времени с Python?

Я работаю над проектом по созданию скриншотов рабочего стола и загрузке изображений на сервер. Я хочу разработать приложение на Python. Когда пользователь запускает это приложение, оно начинает делать скриншоты через произвольный интервал, например, с интервалом 2-5 минут. У меня есть код это будет снимок экрана, и я проверил его на Ubuntu, он работает правильно. Код для захвата скриншота

import gtk.gdk
import time

w = gtk.gdk.get_default_root_window()
sz = w.get_size()
print "The size of the window is %d x %d" % sz
pb = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB,False,8,sz[0],sz[1])
pb = pb.get_from_drawable(w,w.get_colormap(),0,0,0,0,sz[0],sz[1])

ts = time.time()
filename = "screenshot"
filename += str(ts)
filename += ".png"

if (pb != None):
    pb.save(filename,"png")
    print "Screenshot saved to "+filename
else:
    print "Unable to get the screenshot."

Я хочу запустить этот код с произвольным интервалом в 2-5 минут, как я могу разработать скрипт, который будет запускать этот код в потоке.

2 ответа

Решение
#!/usr/bin/env python

import gtk.gdk
import time
import random

while 1 :
    # generate a random time between 120 and 300 sec
    random_time = random.randrange(120,300)

    # wait between 120 and 300 seconds (or between 2 and 5 minutes)
    print "Next picture in: %.2f minutes" % (float(random_time) / 60)
    time.sleep(random_time)

    w = gtk.gdk.get_default_root_window()
    sz = w.get_size()
    print "The size of the window is %d x %d" % sz
    pb = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB,False,8,sz[0],sz[1])
    pb = pb.get_from_drawable(w,w.get_colormap(),0,0,0,0,sz[0],sz[1])

    ts = time.time()
    filename = "screenshot"
    filename += str(ts)
    filename += ".png"

    if (pb != None):
        pb.save(filename,"png")
        print "Screenshot saved to "+filename
    else:
        print "Unable to get the screenshot."

Я бы соблазнился передать это во внешнюю библиотеку, такую ​​как PyScreenshot.

Позвольте ему справиться с тяжелой работой (например, определите, какой DM и экранный API ему нужен), оставив вам изображение PIL, которое вы можете сохранить на диск или вывести в виде файла для загрузки.

Есть множество ответов, которые делают это вручную при переполнении стека, если вы настроены на DIY.


Что касается интервала, это должно быть нарезано? Может ли скрипт не просто запускаться сам по себе, а затем, после того как сделан снимок, спать в течение произвольного периода времени (от 120 до 300 секунд)?

import random
import time

time.sleep(random.randrange(120, 300))
Другие вопросы по тегам