如何将参数值传递给Popen?

时间:2011-07-28 18:15:06

标签: python

从python控制台可以看到:

convert -quality 100 in.pdf out.png

但是当我将这个命令添加到我的Python脚本时:

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

我明白了:

unrecognized option `-quality 100'

如果我将该参数更改为'-quality=100',我仍会收到错误。

我试着像这样修理它:

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

运行但无法生成out.png

更新:最后一个版本正常运行。我原本一定输入错误。

3 个答案:

答案 0 :(得分:4)

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

你应该记住,在调用communicate之前,命令仍然可以运行(尽管在你的情况下这不太可能)。在致电沟通后检查returncode以查明程序是否遇到任何错误(如格式错误的PDF文件等)。

此外,imagemagick转换将多页PDF写入多个PNG文件(out-0.pngout-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')

答案 1 :(得分:2)

这很好用:

#! /usr/bin/python3.2

from subprocess import Popen

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

使用

Version: ImageMagick 6.6.2-6 2011-03-16 Q16 http://www.imagemagick.org
Copyright: Copyright (C) 1999-2010 ImageMagick Studio LLC
Features: OpenMP 

你确定脚本可以找到你的in.pdf吗?

答案 2 :(得分:1)

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

Popen(['/path/to/convert', '-quality', '100', 'in.pdf', 'out.png'])

将'/ path / to / convert'替换为真实路径。此外,您需要确保执行脚本的帐户在当前目录中具有读写权限。