1

我在一个子进程中运行 ghostscript,它运行良好,但我似乎无法捕获错误。

import subprocess

cmd = 'gs -dSAFER -dNOPAUSE -dBATCH -sDEVICE=jpeg -sOutputFile=img-%d.jpeg -r150 -g600x600 sample.pdf'
p = subprocess.Popen(cmd.split(), shell=False, stderr=subprocess.PIPE)

stderr = p.communicate()

print stderr

我的问题是命令是否正确执行或没有标准错误总是等于:

(没有任何, '')

我第二次尝试同时指定 stdout 和 stderr

p = subprocess.Popen(slide_cmd.split(), shell=False, stdin=PIPE, stdout=PIPE, stderr=STDOUT)

p.stdout 给出输出,但 p.stderr 仍然返回 None

4

1 回答 1

3

Ghostscript 似乎主要写入 STDOUT,除了致命错误的摘要,如

GPL Ghostscript 8.71: Unrecoverable error, exit code 1

最终出现在 STDERR 上。因此,也请阅读 STDOUT,您应该能够捕获所有内容。

为了帮助调试,使用 subprocess 打印您在 python 中执行的命令,然后在 shell 中使用 IO 重定向将输出重定向到文件,以便在该流上查看 GS 输出什么。例如:gs [args] 2>stderr.txt 1>stdout.txt

在旁注中,您应该使用shlex.split()而不是str.split()标记参数列表,请参阅子流程文档中的此注释

在第二个站点上注意:一旦您开始使用字符串格式 ( ) 将“sample.pdf”替换为实际文件名cmd % filename,请确保您转义它%d(因为它应该由 GS,而不是 Python 解释),%%d而是使用。

于 2012-09-04T20:55:29.570 回答