Я пытаюсь выполнить xvfb-run
через py.sh, но я получаю sh.ErrorReturnCode_1
и не создавая в результате PDF.sh.py не выполняется xvfb-run
Я создал небольшой HTML-файл:
$ echo '<h1>Hello, World.</h1>' > test.html
И я побежал xvfb_run
через sh.py в Python:
$ python
Python 2.7.3 (default, Sep 26 2012, 21:51:14)
[GCC 4.7.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from sh import xvfb_run
>>> xvfb_run('--server-num=1 --server-args="-screen 0, 1024x768x24" '
... '/usr/bin/wkhtmltopdf --ignore-load-errors', 'test.html', 'test.pdf')
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
File "/home/mark/.virtualenvs/reports/local/lib/python2.7/site-packages/sh.py", line 726, in __call__
return RunningCommand(cmd, call_args, stdin, stdout, stderr)
File "/home/mark/.virtualenvs/reports/local/lib/python2.7/site-packages/sh.py", line 291, in __init__
self.wait()
File "/home/mark/.virtualenvs/reports/local/lib/python2.7/site-packages/sh.py", line 295, in wait
self._handle_exit_code(self.process.wait())
File "/home/mark/.virtualenvs/reports/local/lib/python2.7/site-packages/sh.py", line 309, in _handle_exit_code
self.process.stderr
sh.ErrorReturnCode_1:
RAN: '/usr/bin/xvfb-run --server-num=1 --server-args="-screen 0, 1024x768x24" /usr/bin/wkhtmltopdf --ignore-load-errors test.html test.pdf'
STDOUT:
STDERR:
я затем проверить обратно в оболочке, чтобы увидеть, если что-то было создал и ничего не имеет:
$ ls -l
total 4
-rw-rw-r-- 1 mark mark 23 May 22 07:54 test.html
Так я тогда выписывать в xvfb-run
команда сверху и она отлично работает:
$ /usr/bin/xvfb-run --server-num=1 --server-args="-screen 0, 1024x768x24" /usr/bin/wkhtmltopdf --ignore-load-errors test.html test.pdf
Loading page (1/2)
Printing pages (2/2)
Done
И есть файл PDF я пытаюсь создать:
$ ls -l
total 12
-rw-rw-r-- 1 mark mark 23 May 22 07:54 test.html
-rw-rw-r-- 1 mark mark 7091 May 22 07:55 test.pdf
Затем я попытался с помощью метода call
из стандартной библиотеки:
>>> from subprocess import call
>>> call(['/usr/bin/xvfb-run', '--server-num=1', '--server-args="-screen 0, 1024x768x24"', '/usr/bin/wkhtmltopdf', '--ignore-load-errors', 'test.html', 'test.pdf'])
xvfb-run: error: Xvfb failed to start
1
Я тогда подумал, что среда окружения DISPLAY
не установлена, но я не испытываю никакой радости от этого:
>>> import os
>>> os.environ["DISPLAY"]=":99"
>>> call(['/usr/bin/xvfb-run', '--server-num=1', '--server-args="-screen 0, 1024x768x24"', '/usr/bin/wkhtmltopdf', '--ignore-load-errors', 'test.html', 'test.pdf'])
xvfb-run: error: Xvfb failed to start
1
>>> call(['/usr/bin/wkhtmltopdf', '--ignore-load-errors', 'test.html', 'test.pdf'])
wkhtmltopdf: cannot connect to X server :99
1
>>> os.environ["DISPLAY"]=":1"
>>> call(['/usr/bin/wkhtmltopdf', '--ignore-load-errors', 'test.html', 'test.pdf'])
wkhtmltopdf: cannot connect to X server :1
Любая идея, почему py.sh и call
не смогли выполнить эту команду? Здесь что-то не хватает?