Не работает скрипт конвертации

Имеем Ubuntu 18, python3.9 и скрипт:

from subprocess import Popen, PIPE, STDOUT
from io import StringIO

def runCmd(command, print_output=True):
    popen = Popen(command, stdout=PIPE, stderr=STDOUT, universal_newlines=True)
    out = StringIO()
    for line in popen.stdout:
        if print_output:
            print(line, end='')
        else:
            out.write(line)

    popen.stdout.close()
    return_code = popen.wait()

    if not return_code == 0:
        raise RuntimeError(
            'The process call "{}" returned with code {}. The return code is not 0, thus an error '
            'occurred.'.format(list(command), return_code))

    stdout_string = out.getvalue()
    out.close()

    return stdout_string


path_to_folder = '$(pwd)'
path_ppt_file = '$(pwd)/test.pptx'
name_file = 'test'
cmd = f'$(which soffice) --headless "-env:UserInstallation=file:///tmp/LibreOffice_Conversion_{name_file}" ' \
      f'--convert-to pdf:writer_pdf_Export --outdir {path_to_folder} {path_ppt_file}'

runCmd(cmd)

В каталоге, где лежит скрипт лежат файлы:

  • test.pptx (владелец - пользователь)
  • script.py (владелец - пользователь)

Когда запускаю скрипт, выходит ошибка:

FileNotFoundError: [Errno 2] No such file or directory: '$(which soffice) --headless "-env:UserInstallation=file:///tmp/LibreOffice_Conversion_test" --convert-to pdf:writer_pdf_Export --outdir $(pwd) $(pwd)/test.pptx'

Но, если взять и скопировать из ошибки команду и запустить в этом же каталоге:

$(which soffice) --headless "-env:UserInstallation=file:///tmp/LibreOffice_Conversion_test" --convert-to pdf:writer_pdf_Export --outdir $(pwd) $(pwd)/test.pptx

То все прекрасно сконвертируется и появится PDF-файл...

Почему через скрипт Python не хочет конвертироваться?

UPD: Решил пойти по другому пути:

cmd = f'/usr/bin/soffice --headless '\
              f'-env:UserInstallation=file:///tmp/LibreOffice_Conversion_{self.name_file} '\
              f'--convert-to pdf:writer_pdf_Export --outdir {self.ubuntu_pref}/{self.path_to_folder} {self.ubuntu_pref}/{path_ppt_file}'
comand_split = shlex.split(cmd)
child = subprocess.Popen(comand_split, stdout=subprocess.PIPE,
                                 stderr=subprocess.STDOUT, encoding='utf-8',
                                 shell=False)
child.wait(timeout=15)
print('child.returncode:', child.returncode)
print('child.communicate():', child.communicate())

На это раз хоть в консоли стали ошибки видны:

child.returncode: 127
child.communicate(): ('/usr/bin/soffice: 46: /usr/bin/soffice: dirname: not found\n/usr/bin/soffice: 48: /usr/bin/soffice: basename: not found\n/usr/bin/soffice: 49: /usr/bin/soffice: sed: not found\n/usr/bin/soffice: 49: /usr/bin/soffice: ls: not found\n/usr/bin/soffice: 51: /usr/bin/soffice: dirname: not found\n/usr/bin/soffice: 145: /usr/bin/soffice: grep: not found\n/usr/bin/soffice: 151: /usr/bin/soffice: uname: not found\n/usr/bin/soffice: 191: exec: /home/FOLDER_USER/FOLDER_APP/oosplash: not found\n', None)

Если зайти в /usr/bin/, то soffice там лежит: введите сюда описание изображения

А если в консоли ssh запустить:

/usr/lib/libreoffice/program/soffice

То выходит ошибка:

Failed to open display
javaldx failed!
Warning: failed to read path from javaldx

Может это всему виной?


Ответы (0 шт):