Tire screenshots em intervalos aleatórios com o Python?

5

Estou trabalhando em um projeto para fazer capturas de tela da área de trabalho e fazer upload de imagens para um servidor. Eu quero desenvolver um aplicativo python, quando o usuário inicia esse aplicativo, ele vai tirar screenshots em intervalos aleatórios, como entre 2-5 min do intervalo I tenho o código que vai tirar screenshot e testei no ubuntu ele está funcionando corretamente. Código para capturar screenshots

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."

Eu quero rodar este código em intervalo aleatório de 2-5 min, como eu posso desenvolver um script que irá rodar este código no thread.

    
por Subodh Ghulaxe 13.09.2013 / 12:20

2 respostas

4
#!/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."
    
por Radu Rădeanu 13.09.2013 / 13:20
2

Eu ficaria tentado a criar isso em uma biblioteca externa como a PyScreenshot .

Deixe-o lidar com o trabalho pesado (como descobrir qual API DM e de tela ele precisa), deixando uma imagem PIL que você pode salvar em disco ou transmitir como um upload.

Há um bando de respostas fazendo isso manualmente no Stack Overflow embora, se você está determinado a DIY.

Quanto ao intervalo, isso precisa ser encadeado? O script não pode ser executado sozinho e, depois de tirar uma foto, dormir por um período aleatório (entre 120 e 300 segundos)?

import random
import time

time.sleep(random.randrange(120, 300))
    
por Oli 13.09.2013 / 12:52