在传递可选参数时,使用subprocess.popen和os.tmp文件在python中使用
题
我正在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 -layout”等代替“ pdftotext”等。他们都给我一个空文字。由于输入是通过临时文件输送的,因此我在找出参数列表时遇到了困难。 Popen上的大多数文档都假定所有参数都通过参数列表传递,但是在我的情况下,输入正在通过临时文件传递。
任何帮助将不胜感激。
解决方案
这对我有用:
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()
不隶属于 StackOverflow