Я пытаюсь запустить функцию 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 :( Что я делаю не так?






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