Запуск Xvfb и CutyCapt в качестве подпроцесса Python
Я пытаюсь сделать скриншот в фоновом режиме, используя CutyCapt
Мое приложение написано на python и вызывает CutyCapt, запустив подпроцесс.
Работает локально (windows) просто отлично, но CutyCapt.exe для windows не требует x-сервера. Когда я пытаюсь выполнить свой код (через подпроцесс python) в моем окне ubuntu, он лает, что я не предоставляю команду 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 -извлечение кавычки из экранных аргументов -разрыв экранных аргументов в список -setting os.environ["DISPLAY"]=":0" перед выполнением подпроцесса
Нужно ли прерывать процесс xvfb из команды CutyCapt?
Любая помощь будет принята с благодарностью.
1 ответ
В 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)