Я использую PhantomJS для создания PDF из файла HTML
- Шаблоны Django генерируют HTML-файл
- HTML-файл хранится во временной папке
- Команда phantomjs выполняется с помощью команды os.system () или subprocess.call () и, как ожидается, создаст файл PDF.
Команда phantomjs работает нормально в двух условиях:
- При запуске непосредственно на оболочке.
- При запуске через вызов API
Однако требуется, чтобы он запускался через задание cron, и именно здесь он выдает следующую ошибку:
Traceback (most recent call last):
File "/home/ubuntu/reniso/reniso_django/inspections/cron.py", line 105, in do if ZInspectorReportGenerator(inspection_id).generate_inspection_report():
File "/home/ubuntu/reniso/reniso_django/inspections/inspection_report.py", line 213, in generate_inspection_report s3_config_type='inspection_reports').generate_pdf()
File "/home/ubuntu/reniso/reniso_django/django_fiblabs/html_to_pdf/transform.py", line 24, in generate_pdf html_path_name=html_path_name)
File "/home/ubuntu/reniso/reniso_django/django_fiblabs/html_to_pdf/transform.py", line 93, in convert_html_to_pdf result = subprocess.check_output(conversion_command)
File "/usr/lib/python3.6/subprocess.py", line 336, in check_output **kwargs).stdout
File "/usr/lib/python3.6/subprocess.py", line 403, in run with Popen(*popenargs, **kwargs) as process:
File "/usr/lib/python3.6/subprocess.py", line 709, in __init__ restore_signals, start_new_session)
File "/usr/lib/python3.6/subprocess.py", line 1344, in _execute_child raise child_exception_type(errno_num, err_msg, err_filename)
FileNotFoundError: [Errno 2]
No such file or directory: 'phantomjs html_to_pdf.js rp1001151_24_08_2018_inspection.html rp1001151_24_08_2018_inspection.pdf':
'phantomjs html_to_pdf.js
rp1001151_24_08_2018_inspection.html rp1001151_24_08_2018_inspection.pdf'
Точно такая же команда работает через оболочку, она также работает через вызов API, но не через задание cron. Я удостоверился, что рабочий каталог и переменные env все установлены правильно. Я вижу это как проблему на уровне питона, а не на уровне фантома.
Это код:
def convert_html_to_pdf(self, file_name, html_path_name):
pdf_file = file_name + ".pdf"
pdf_dir = '%s/.temp/pdf_%s' % (settings.BASE_DIR, self.doc_type)
make_dir_if_not_exists(pdf_dir)
pdf_file_path = "%s/%s" % (pdf_dir, pdf_file)
location_of_phantom_convertor = os.path.dirname(os.path.abspath(__file__)) + "/html_to_pdf.js"
print('76: ', os.getcwd())
conversion_command = "phantomjs %s %s %s" % (location_of_phantom_convertor, html_path_name, pdf_file_path)
# SAME ISSUE WHILE using OS command
#import os
#os.system(conversion_command)
import subprocess
result = subprocess.check_output(conversion_command)
return pdf_file_path, pdf_file