Subprocess.run простой сценарий не работает

Я пытаюсь запустить функцию python subprocess.run для выполнения следующей команды:

 pdftoppm -jpeg -f 1 -scale-to 200 data/andromeda.pdf and-page

pdftoppm - это часть утилиты poppler, которая генерирует изображения из файлов pdf.

Файл data / andromeda.pdf существует. Данные папки находятся на том же уровне, что и скрипт Python и / или откуда я запускаю команду. Команда в основном сгенерирует файл jpeg со страницы 1 (-f 1) шириной 200 пикселей (-scale-to) из данного файла формата and-page-1.jpeg (так называемый ppmtroot).

Короче говоря: из командной строки он работает, как и ожидалось, т.е. если я вызываю указанную выше команду либо из оболочки zsh, либо из оболочки bash, вручную - она ​​генерирует миниатюру, как и ожидалось. Однако, если я запустил его из модуля подпроцесса python - он не работает, он вернет код ошибки 99!

Ниже приведен код Python (имя файла sc_02_thumbnails.py):

import subprocess
import sys


def main(filename, ppmroot):
    cmd = [
        'pdftoppm',
        '-f 1',
        '-scale-to 200',
        '-jpeg',
        filename,
        ppmroot
    ]
    result = subprocess.run(
        cmd,
        stdout=subprocess.PIPE,
        stderr=subprocess.PIPE
    )
    if result.returncode:
        print("Failed to generate thumbnail. Return code: {}. stderr: {}".format(
            result.returncode,
            result.stderr
        ))
        print("Used cmd: {}".format(' '.join(cmd)))
        sys.exit(1)
    else:
        print("Success!")         


if __name__ == "__main__":
    if len(sys.argv) > 2:
        filename = sys.argv[1]
        ppmroot = sys.argv[2]
    else:
        print("Usage: {} <pdffile> <ppmroot>".format(sys.argv[0]))
        sys.exit(1)

    main(filename, ppmroot)

И здесь - это репо, которое также включает файл data / andromeda.pdf. Я вызываю свой скрипт как (из zsh):

 $ chmod +x ./sc_02_thumbnauils.py
 $ ./sc_02_thumbnails.py data/andromeda.pdf  and-page

и ... не удалось создать эскиз! Я пробовал запускать скрипт python как из оболочек zsh, так и из bash :( Что я делаю не так?

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
257
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Цитата неверная, у вас должен быть '-f', '1', и т. д.

Удивительно, это решает мою проблему! Я боролся с этим со вчерашнего дня! Не знаю почему, но ТАК запрещает мне принимать ответ через две минуты.

eugenci 05.12.2018 10:23

Другие вопросы по теме