Мне нужно запустить wkhtmltopdf
из python с помощью subprocess.call(...). Из командной строки я могу без проблем сгенерировать pdf, но когда он запускается из python, он терпит неудачу с segfault.
Я понятия не имею, что вызывает wkhtmltopdf
segfault.
Я даже пытался отправить атрибуты env
своего терминала, но он все равно дает сбои. Я отправил stderr, stdin, stdout, но ничего не работает. Что меня беспокоит, так это то, что он запускается с терминала, а не с python.
Кроме того, вызов процесса из другого процесса в python также приводит к segfault. Например, я добавил промежуточный скрипт для вызова этого приложения, а скрипт, написанный на python, также получает segfault от wkhtmltopdf.
#!/bin/env python
import subprocess
import sys
import pdb
import os
sys.argv[0] = "/usr/local/bin/wkhtmltopdf.b"
sys.argv.remove('--quiet')
status = subprocess.call(sys.argv,
env=env,
stdin=sys.stdin,
stdout=open("/tmp/stdout.w", "w"),
stderr=open("/tmp/stderr.w", "w"))
cmd = " ".join(sys.argv)
pdb.set_trace()
Сейчас я делаю это, чтобы получить время для выполнения команды во внешнем терминале. OpenErp проверяет содержимое pdf-файла. wkhtmltopdf.b
— исходный двоичный файл. Я удалил тихий параметр, так как хотел посмотреть, что происходит.
По-видимому, в этот момент он ошибается:
Loading pages (1/6)
[======> ] 10%
И ничего больше
Моя версия wkhtmltopdf amd64 static с сайта wkhtmltopdf.org
$ wkhtmltopdf -V
wkhtmltopdf 0.12.1 (with patched qt)
Я запускаю один из бинарных пакетов ubuntu amd64 на моем gentoo box. Довольно сложно/долго компилировать wkhtmltopdf с исправленным qt в gentoo, похоже, он не поддерживается по умолчанию. Тем не менее, поскольку он запускается из командной строки, он также должен запускаться из python.
Я запускаю его из zsh, но даже если внутри моей программы на Python я бы вместо этого назвал что-то вроде этого:
'/bin/sh -c "%s"' % command
Это также будет segfault.
LD_LIBRARY_PATH
в вашей командной строке, указывающий на более новую библиотеку, которую используетwkhtmltopdf
, в то время как этот путь отсутствует при запуске черезsubprocess
, и, таким образом,wkhtmltopdf
возвращается к более старой библиотеке, что вызывает segfault. Попробуйте найти одну или несколько переменных оболочки/среды, которые заставляютwkhtmltopdf
работать правильно в командной строке. - person   schedule 05.12.2014env
результатомenv
с моего терминала. Я вырезал его, потому что он довольно большой. Но env такой же, как в моем терминале. - person Loïc Faure-Lacroix   schedule 06.12.2014