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