使用子进程处理ImageMagick的异常



我有一个从ImageMagik转换的子流程调用,可以将gif切片成帧,但当它遇到像这样的坏gif时(http://www.image-share.com/upload/3207/277.gif)

try: 
    command = ["convert" , "-coalesce", "-scene" , "0" , infile, outfile]          
    output,error = subprocess.Popen(command, universal_newlines=True,stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate() 
except: 
    print "%%% convert failed Up" 
else: 
   print "*** converted"

我从不例外。文件未创建,打印输出和错误导致为空

当你从命令行执行相同的命令时,你会得到以下错误:

convert -coalesce examine.gif video.png convert: corrupt image examine.gif' @ error/gif.c/ReadGIFImage/1368. 
convert: no images definedvideo.png' @ error/convert.c/ConvertImageCommand/3252.

所以它确实输出了一条错误消息,但我似乎无法捕获它!是否有解决坏gif和错误输出的方法?

我建议评估subprocess.Popen.returncode。在本例中,应该抛出(或引发)任何非零响应。

try: 
    command = ["convert" , "-coalesce", "-scene" , "0" , infile, outfile]          
    child = subprocess.Popen(command, universal_newlines=True,stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    output,error = child.communicate() 
    if child.returncode != 0:
      raise Exception("Oops")  # Although you should use a better Exception + message
except: 
    print( "%%%% convert failed Up")
else: 
    print( "*** converted")

最新更新