использование subprocess.popen в python с файлом os.tmp при передаче необязательных параметров - PullRequest
0 голосов
/ 09 октября 2010

Я пишу программу на 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 ]

2 голосов
/ 09 октября 2010

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

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

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

0 голосов
/ 09 октября 2010

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

out, err = subprocess.Popen('pdftotext -layout - -', shell=True, stdin=tf, stdout=subprocess.PIPE).communicate()
...