Python OSError不报告错误

时间:2010-03-26 00:03:28

标签: python imagemagick

我有这个用于将图像文件转换为tiff的片段。我希望在文件无法转换时收到通知。 Imagemagick在成功运行时退出0,因此我认为以下代码段会报告此问题。但是根本没有报告任何错误。


def image(filePath,dirPath,fileUUID,shortFile):
  try:
    os.system("convert " + filePath + " +compress " + dirPath + "/" + shortFile + ".tif")
  except OSError, e:
    print >>sys.stderr, "image conversion failed: %s" % (e.errno, e.strerror)
    sys.exit(-1)

4 个答案:

答案 0 :(得分:5)

如果返回值不为零,则

os.system()不会抛出异常。你应该做的是捕获返回值并检查:

ret = os.system(...)
if ret == ...:

当然, 所做的就是用subprocess替换os.system()

答案 1 :(得分:3)

更好的想法是使用子进程模块中的check_call,当子进程返回非零值时,它会引发CalledProcessError。

答案 2 :(得分:1)

您可以使用PythonMagick(ImageMagick)直接通过Python访问download here。一种更受欢迎的图像处理工具是PIL

答案 3 :(得分:0)

+通常是在Python中构建字符串的不好方法。

我倾向于用{/ 1>替换"convert " + filePath + " +compress " + dirPath + "/" + shortFile + ".tif"

import os.path
"convert %s +compress %s.tif" % (filePath, os.path.join(dirPath, shortFile))

话虽如此,您将使用

替换整个os.system来电
from subprocess import check_call, CalledProcessError

newFile = "%s.tif" % (filePath, os.path.join(dirPath, shortFile)
command = ["convert", filePath, "+compress", newFile]
try:
    check_call(command)
except CalledProcessError as e:
    ...