3

CutyCaptを使用してバックグラウンドでスクリーンショットを撮ろうとしています

私のアプリケーションは Python で書かれており、サブプロセスを実行して CutyCapt を呼び出します。

ローカル (Windows) では問題なく動作しますが、Windows 用の CutyCapt.exe は x サーバーを必要としません。ubuntuボックスで(pythonサブプロセスを介して)コードを実行しようとすると、Xvfbにコマンドを提供していないと吠えます。ただし、ボックスでコマンドを自分で実行すると、正常に動作します。

ボックスで機能するコマンド:

box$ xvfb-run --server-args="-screen 0, 1100x800x24" ./CutyCapt --url=http://www.google.com --out=temp.png

失敗する Python コード:

def url_screengrab(url, **kwargs):
    url, temp_path, filename, url_hash = get_temp_screengrab_info(url)
    args = []
    if sys.platform.startswith("linux"):
        args.append('xvfb-run')
        args.append('--server-args="-screen 0, 1100x800x24"')
    args.append(settings.CUTYCAPT_EXE_PATH)
    args.append('--url=%s' % (url))
    args.append('--out=%s' % (temp_path,))
    subprocess.Popen(args, shell=False)
    return temp_path, filename, url_hash

返されたエラー:

xvfb-run: usage error: need a command to run
box$

私が試したこと: - Popen の代わりに call を使用する - 画面引数から引用符を取り除く - 画面引数をリストに分割する - サブプロセスを実行する前に os.environ["DISPLAY"]=":0" を設定する

CutyCapt コマンドから xvfb プロセスを分割する必要がありますか?

どんな助けでも大歓迎です。

4

1 に答える 1

6

Ubuntu 11.10 では、cutycapt および xvfb パッケージがインストールされているため、次のように動作します (少なくとも私にとっては...)。

import shlex
import subprocess

def url_screengrab(url, **kwargs):
    cmd = '''xvfb-run --server-args "-screen 0, 1100x800x24"
             /usr/bin/cutycapt --url={u} --out=temp.png '''.format(u = url)
    proc = subprocess.Popen(shlex.split(cmd))
    proc.communicate()

url = 'http://www.google.com'
url_screengrab(url)
于 2012-04-15T16:11:33.100 に答える