如何将参数值传递给 Popen?

ram*_*am1 2 python

从 python 控制台这有效:

convert -quality 100 in.pdf out.png
Run Code Online (Sandbox Code Playgroud)

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

Popen(['convert', '-quality 100', 'in.pdf', 'out.png'])
Run Code Online (Sandbox Code Playgroud)

我得到:

unrecognized option `-quality 100'
Run Code Online (Sandbox Code Playgroud)

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

我试着像这样修复它:

Popen(['convert', '-quality', '100', 'in.pdf', 'out.png'])
Run Code Online (Sandbox Code Playgroud)

它运行但无法生成out.png.

更新:最后一个版本正在运行。我原先一定是打错了。

phi*_*hag 5

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

您应该记住,在调用communicate完成之前,该命令可能仍会运行(尽管在您的情况下不太可能)。returncode在调用communicate 后检查程序是否遇到任何错误(如格式错误的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')
Run Code Online (Sandbox Code Playgroud)