首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在带有os.tmp文件的python中使用subprocess.popen,同时传入可选参数

在带有os.tmp文件的python中使用subprocess.popen,同时传入可选参数
EN

Stack Overflow用户
提问于 2010-10-09 17:42:09
回答 2查看 1.7K关注 0票数 0

我正在用linux编写一个python程序,在其中的一部分运行pdftotext可执行文件来转换pdf文本。我目前使用的代码如下所示。

代码语言:javascript
复制
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的文档都假设所有参数都是通过参数列表传入的,但在我的例子中,输入是通过临时文件传入的。

任何帮助都将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-10-10 02:25:22

这对我来说很有效:

代码语言:javascript
复制
out, err = subprocess.Popen(
    ["pdftotext", '-layout', "-", "-"], stdin = tf, stdout=subprocess.PIPE ).communicate()

尽管我在手册页中找不到明确的确认,但我相信第一个-告诉pdftotext期望PDF-file来自标准输入,第二个-告诉pdftotext期望将text-file发送到标准输出。

票数 2
EN

Stack Overflow用户

发布于 2010-10-10 02:11:00

您可以使用shell=True在字符串中传递完整的命令:

代码语言:javascript
复制
out, err = subprocess.Popen('pdftotext -layout - -', shell=True, stdin=tf, stdout=subprocess.PIPE).communicate()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3896795

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档