在传递可选参数的同时使用python中的subprocess.popen和os.tmp文件

时间:2010-10-09 09:42:09

标签: python linux pdftotext

我正在linux中编写一个python程序,并在其中运行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()

这很好用,但现在我想用-layout选项运行pdftotext可执行文件(保留文档的布局)。我尝试用布局替换“ - ”,将“pdftotext”替换为“pdftotext -layout”等。它都不起作用。他们都给我一个空白的文字。由于输入是通过临时文件传入的,因此我无法弄清楚参数列表。关于Popen的大多数文档都假设所有参数都是通过参数列表传递的,但在我的情况下,输入是通过临时文件传入的。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

这对我有用:

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

虽然我在手册页中找不到明确的确认,但我相信第一个-告诉pdftotext期望PDF-file来自stdin,第二个- }告诉pdftotext期望将text-file发送到stdout。

答案 1 :(得分:0)

您可以使用shell = True:

在字符串中传递完整命令
out, err = subprocess.Popen('pdftotext -layout - -', shell=True, stdin=tf, stdout=subprocess.PIPE).communicate()