web-dev-qa-db-fra.com

Prenez des captures d'écran à intervalles aléatoires avec Python?

Je travaille sur un projet pour prendre des captures d'écran du bureau et télécharger des images sur un serveur. Je veux développer une application python. Lorsque l'utilisateur lance cette application, il commence à prendre des captures d'écran à intervalles aléatoires, comme entre 2 et 5 minutes. d'intervalle, j'ai le code qui va prendre une capture d'écran et je l'ai testé sur Ubuntu, il fonctionne correctement. Code pour capturer une capture d'écran

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

Je veux exécuter ce code dans un intervalle aléatoire de 2-5 min, comment puis-je développer un script qui exécutera ce code dans thread.

5
Subodh Ghulaxe
#!/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."
4
Radu Rădeanu

Je serais tenté de confier cette tâche à une bibliothèque externe telle que PyScreenshot .

Laissez-le gérer le gros du travail (par exemple, déterminer DM et l'API d'écran dont il a besoin), en vous laissant une image PIL que vous pouvez soit enregistrer sur un disque, soit la diffuser en tant que téléchargement.

Il y a une foule de réponses faire ceci manuellement sur Stack Overflow si, si vous êtes déterminé à faire du bricolage.


Quant à l'intervalle, est-ce que cela doit être fileté? Le script ne peut-il pas être exécuté seul, puis, après avoir pris un instantané, dormir pendant une période aléatoire (entre 120 et 300 secondes)?

import random
import time

time.sleep(random.randrange(120, 300))
2
Oli