我有这个用于将图像文件转换为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)
答案 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:
...