Python OSError не сообщает об ошибках - PullRequest
0 голосов
/ 26 марта 2010

У меня есть этот фрагмент, который я использую для преобразования файлов изображений в 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 ]

5 голосов
/ 26 марта 2010

os.system() не генерирует исключение, если возвращаемое значение ненулевое.Что вы должны сделать, это захватить возвращаемое значение и проверить, что:

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

Конечно, что вы должны также сделать, это заменить os.system() на subprocess.

3 голосов
/ 26 марта 2010

Лучше подумать о том, чтобы использовать check_call из модуля подпроцесса, он вызывает CalledProcessError, когда подпроцесс возвращает ненулевое значение.

1 голос
/ 26 марта 2010

Вы можете получить доступ к ImageMagick напрямую через Python, используя PythonMagick ( скачать здесь ). Более популярный инструмент для работы с изображениями - PIL .

0 голосов
/ 26 марта 2010

+, как правило, плохой способ построения строк в Python.

Я бы хотел заменить "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:
    ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...