Использование subprocess.popen в python с файлом os.tmp при передаче необязательных параметров
Я пишу программу на 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" и т. Д. Ничего из этого не работает. Все они дают мне пустой текст. Поскольку входные данные передаются через временный файл, у меня возникают проблемы с определением списка аргументов. Большая часть документации по Popen предполагает, что все параметры передаются через список аргументов, но в моем случае ввод передается через временный файл.
Любая помощь будет принята с благодарностью.
2 ответа
Это работает для меня:
out, err = subprocess.Popen(
["pdftotext", '-layout', "-", "-"], stdin = tf, stdout=subprocess.PIPE ).communicate()
Хотя я не смог найти явного подтверждения на странице руководства, я считаю, что первое -
говорит pdftotext
ожидать PDF-file
прийти со стандартного ввода, а второй -
говорит pdftotext
ожидать text-file
быть отправленным на стандартный вывод.
Вы можете передать полную команду в строке с shell=True:
out, err = subprocess.Popen('pdftotext -layout - -', shell=True, stdin=tf, stdout=subprocess.PIPE).communicate()