Python: отключить предупреждение iptcinfo - PullRequest
0 голосов
/ 18 мая 2018

Я использую модуль Python iptcinfo для получения метаданных с картинки, но он выдает много (бесполезных) предупреждений такого типа:

('ПРЕДУПРЕЖДЕНИЕ: проблемы с распознаванием кодировки', "'\ x1b' ")

Что это значит и как я могу удалить эти предупреждения (или предотвратить их появление), так как они не кажутся важными для моего кода в любом случае?

Мой код просто:

import iptcinfo
iptc = iptcinfo.IPTCInfo("DSC05647.jpg") 

Ответы [ 3 ]

0 голосов
/ 28 мая 2018

Прежде всего, я думаю, что iptcinfo должен отлично работать с Python 2.

Другим решением будет изменение исходного кода:

Исходный код, отвечающий за предупреждение

('WARNING: problems with charset recognition', "'\x1b'")

находится в строке 971 в файле iptcinfo.py.

LOG.warn('problems with charset recognition %s', repr(temp))

Вы можете разветвить исходное репозиторий github и просто закомментировать его

#LOG.warn('problems with charset recognition %s', repr(temp))

Затем

#Uninstall the original installation
pip uninstall iptcinfo
#Do pip install from your own fork. e.g.:
pip install git+git://github.com/Sulli/iptcinfo.git
0 голосов
/ 29 мая 2018

Проблема в том, что используемый вами модуль делает то, чего модули не ожидают.

print (
       'WARNING: problems with charset recognition',
      repr(temp))

Что-то, что нельзя просто так отключить.Но тогда это хорошие SO потоки о том, как добиться того же самого.

Отключить вывод функции в Python, не удаляя sys.stdout и восстанавливая каждый вызов функции

Подавить вызовы для печати (python)

Таким образом, объединяя их обоих

import iptcinfo

origianl_IPTCInfo = iptcinfo.IPTCInfo

def patch_IPTCInfo(*args, **kwargs):
    import os, sys

    class HiddenPrints:
        def __enter__(self):
            self._original_stdout = sys.stdout
            sys.stdout = open('/dev/null', 'w')

        def __exit__(self, exc_type, exc_val, exc_tb):
            sys.stdout = self._original_stdout

    with HiddenPrints():
        return origianl_IPTCInfo(*args, **kwargs)

iptcinfo.IPTCInfo = patch_IPTCInfo

iptc = iptcinfo.IPTCInfo("/Users/tarunlalwani/Downloads/image.jpg")
print(iptc)

, и это просто прекрасно работает

No Print

0 голосов
/ 18 мая 2018

Эта строка в коде , кажется, генерирует предупреждение:

LOG.warn('problems with charset recognition %s', repr(temp))

Вы видите это сообщение, потому что уровень регистрации по умолчанию для модуля регистрации Python - "предупреждение".

В своем коде вы можете изменить уровень ведения журнала библиотеки в журнале библиотеки, чтобы он не отображал предупреждения:

import logging
iptcinfo_logger = logging.getLogger('iptcinfo')
iptcinfo_logger.setLevel(logging.ERROR)

Редактировать.фрагмент, чтобы увидеть уровни для каждого регистратора:

for logger_name in logging.Logger.manager.loggerDict:
    logger_level = logging.getLogger(logger_name).level
    print logger_name, logging.getLevelName(logger_level)
...