Python 如何将参数值传递给Popen?

Python 如何将参数值传递给Popen?,python,Python,在python控制台中,这可以工作: convert -quality 100 in.pdf out.png 但当我将该命令添加到Python脚本时,如下所示: Popen(['convert', '-quality 100', 'in.pdf', 'out.png']) Popen(['convert', '-quality', '100', 'in.pdf', 'out.png']) 我得到: unrecognized option `-quality 100' 如果我将该参数更改为

在python控制台中,这可以工作:

convert -quality 100 in.pdf out.png
但当我将该命令添加到Python脚本时,如下所示:

Popen(['convert', '-quality 100', 'in.pdf', 'out.png'])
Popen(['convert', '-quality', '100', 'in.pdf', 'out.png'])
我得到:

unrecognized option `-quality 100'
如果我将该参数更改为
'-quality=100'
,我仍然会得到错误

我试着这样修理它:

Popen(['convert', '-quality 100', 'in.pdf', 'out.png'])
Popen(['convert', '-quality', '100', 'in.pdf', 'out.png'])
运行,但无法生成
out.png


更新:最新版本正在运行。我最初一定是打错了。

每个参数都有自己的列表元素,所以第二个变量是正确的

您应该记住,在调用完成之前,该命令可能仍在运行(尽管在您的情况下不太可能)。调用communicate后,请检查
returncode
,以了解程序是否遇到任何错误(例如格式错误的PDF文件等)

此外,imagemagick convert将多页PDF写入多个PNG文件(
out-0.PNG
out-1.PNG
)。检查这些是否存在。使用
-append
抑制该行为

import subprocess
Popen = subprocess.Popen
s = Popen(['convert', '-quality', '100', 'in.pdf', '-append', 'out.png'])
s.communicate()
if s.returncode != 0:
   raise OSError('convert error')

脚本运行时,必须在执行路径中找到
convert
命令。您能否在参数中包含
convert
的完整路径

Popen(['/path/to/convert', '-quality', '100', 'in.pdf', 'out.png'])
将“/path/to/convert”替换为实际路径。此外,您还需要确保执行脚本的帐户在当前目录中具有读写权限。

这可以正常工作:

#! /usr/bin/python3.2

from subprocess import Popen

Popen ( ['convert', '-quality', '100', 'test.pdf', 'out.png'] )
使用


您确定脚本可以在.pdf中找到您的文件吗?

您的上一个示例应该可以工作,它是否提供了任何输出?是的,它现在可以工作了。我一定是第一次打错了。@ryaz:“最后一个版本正在运行”。要么回答你自己的问题(没关系),要么结束这个问题。我认为硬编码一个引用来转换不是一个好主意。希望这些二进制文件将在路径中,否则程序将无法在不同的系统上工作。@Whoopska:尽管“希望”,但如果二进制文件不在路径中,代码将无法成功执行。理想的情况是a)在尝试执行命令之前确定命令是否存在,或b)在配置文件中放置“转换”路径,并在安装过程中提示用户验证或更改它。我不能为所有操作系统作证,但是错误代码127似乎可以通过
.returncode
之类的方法提取出来,或者在测试时,通过捕获
OSError
来提取出来。不过我同意你的看法,你的两个选择都是非常理想的。