2010-10-09 57 views
0

我正在linux中编写一个python程序,并在其中运行pdftotext可执行文件以转换pdf文本。我目前使用的代码如下。在python中使用subprocess.popen与os.tmp文件同时传入可选参数

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 -layout”替换“pdftotext”等。它们都不起作用。他们都给我一个空的文字。由于输入是通过临时文件输入的,因此我很难计算出参数列表。 Popen上的大多数文档都假定所有参数都通过参数列表传入,但在我的情况下,输入是通过临时文件传入的。

任何帮助将不胜感激。

回答

2

这个工作对我来说:

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

虽然我找不到手册页明确的确认,我相信第一个-告诉pdftotext预计PDF-file来自标准输入,第二个-告诉pdftotext预计text-file发送到标准输出。

0

您可以在字符串壳通过完整的命令= TRUE:

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

不起作用。我得到一个错误“TypeError:'Popen'对象不可迭代” – Chaitanya 2010-10-10 05:22:42