python - 如何从子进程中运行的ghostscript命令捕获错误

时间:2012-09-04 20:35:36

标签: python ghostscript subprocess

我在子进程中运行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

我的问题是命令是否正确执行,或者stderr是否始终等于:

(无,'')

我再次尝试指定stdout和stderr

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

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

1 个答案:

答案 0 :(得分:3)

Ghostscript似乎主要写给STDOUT,除了

等致命错误的摘要
GPL Ghostscript 8.71: Unrecoverable error, exit code 1

最终在STDERR上。所以,也请阅读STDOUT,你应该能够捕获所有内容。

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

在旁注中,您应使用shlex.split()代替str.split()来标记参数列表,请参阅此note in the subprocess docs

在第二个网站上注意:一旦你开始使用字符串格式(cmd % filename)替换带有实际文件名的'sample.pdf',请确保你转义%d(因为它意味着被解释)通过使用%%d来代替GS。而不是Python。