Использование подпроцесса.POPEN в Python с файлом OS.TMP при прохождении в необязательных параметрах

StackOverflow https://stackoverflow.com/questions/3896795

  •  29-09-2019
  •  | 
  •  

Вопрос

Я пишу программу Python в Linux и частично запущенную исполняемый файл pdftotext для преобразования текста PDF. Код, который я использую в настоящее время, приведен ниже.

pdfData = currentPDF.read()

tf = os.tmpfile()
tf.write(pdfData)
tf.seek(0)

out, err = subprocess.Popen(["pdftotext", "-", "-"], stdin = tf, stdout=subprocess.PIPE ).communicate()

Это работает нормально, но теперь я хочу запустить исполняемый файл pdftotext с опцией -layout (консервирует расположение документа). Я попытался заменить «-» с помощью макета, замена «pdFtOtext» с «pdftotext -layout» и т. Д. Ни один из него не работает. Все они дают мне пустой текст. Поскольку вход работает через файл Temp, у меня возникли проблемы со списком аргументов. Большая часть документации на POPEN предполагает, что все параметры передаются через список аргументов, но в моем случае вход пропускается через файл Temp.

Любая помощь будет очень оценена.

Это было полезно?

Решение

Это работает для меня:

out, err = subprocess.Popen(
    ["pdftotext", '-layout', "-", "-"], stdin = tf, stdout=subprocess.PIPE ).communicate()

Хотя я не мог найти явное подтверждение на странице человека, я считаю, что первое - рассказывает pdftotext ожидать PDF-file приехать из Stdin, а второй - рассказывает pdftotext ожидать text-file быть отправленным в Stdout.

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

Вы можете пройти полную команду в строке с помощью Shell = True:

out, err = subprocess.Popen('pdftotext -layout - -', shell=True, stdin=tf, stdout=subprocess.PIPE).communicate()
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top