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