Python 如何将参数值传递给Popen?
在python控制台中,这可以工作: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' 如果我将该参数更改为
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
来提取出来。不过我同意你的看法,你的两个选择都是非常理想的。