Ошибка файла не найдена при использовании python для выполнения команды оболочки для генерации PDF - PullRequest
0 голосов
/ 03 сентября 2018

Я использую PhantomJS для создания PDF из файла HTML

  1. Шаблоны Django генерируют HTML-файл
  2. HTML-файл хранится во временной папке
  3. Команда phantomjs выполняется с помощью команды os.system () или subprocess.call () и, как ожидается, создаст файл PDF.

Команда phantomjs работает нормально в двух условиях:

  1. При запуске непосредственно на оболочке.
  2. При запуске через вызов 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
...