web-dev-qa-db-ja.com

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分のランダムな間隔で実行したいのですが、このコードをスレッドで実行するスクリプトをどのように開発できますか。

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

これを PyScreenshot のような外部ライブラリに変換したいと思うでしょう。

重い作業(必要なDMとスクリーンAPIの処理など)を処理して、ディスクに保存するか、アップロードとしてストリームできるPILイメージを残します。

たくさんの答えがあります スタックオーバーフローで手動でこれを行う ただし、DIYに決めている場合。


間隔については、これをスレッド化する必要がありますか?スクリプトを単独で実行するだけでなく、スナップショットを取得した後、ランダムな期間(120〜300秒)スリープすることはできますか?

import random
import time

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