Как подавить предупреждающие сообщения ITK в python

#python #itk

#python #itk

Вопрос:

Всякий раз, когда я загружаю.img.gz файл с использованием python medpy.io функция загрузки, я получаю предупреждающее сообщение типа:

ПРЕДУПРЕЖДЕНИЕ: в /usr/share/miniconda/envs/bld/conda-bld/simpleitk_1598369168428/work/build/ITK/Modules/IO/NIFTI/src/itkNiftiImageIO.cxx , строка 1009 NiftiImageIO (0x56268f287910): /data/temp.img.gz это анализируемый файл, и он устарел

Есть ли какой-либо способ подавить предупреждающие сообщения? Я попытался использовать библиотеку импорта журналов и установить logging.disable(sys.maxsize) и импортировать предупреждения и установить warnings.simplefilter («игнорировать», category = PendingDeprecationWarning)

Ни один из методов не сработал для меня.

Ответ №1:

Что, если вы не укажете категорию?

Я делаю это таким образом в каждом конкретном случае, чтобы это не влияло на весь файл python.

 import warnings

with warnings.catch_warnings():
    warnings.simplefilter("ignore")
    # do whatever after this
    
 

Обновление: вероятно, это проблема со стороны C , которая выдает предупреждение, а не python. Вам придется больше копаться в C , чтобы уловить это.
https://github.com/InsightSoftwareConsortium/ITK/blob/34231b57021418fdb6afd4fcf5082a73b12969ed/Modules/IO/NIFTI/src/itkNiftiImageIO.cxx#L1009 а затем посмотрите на itkWarningMacro : https://itk.org/Doxygen318/html/itkMacro_8h.html#a0c47033c6ca9aae1319b1793f4419ada

Комментарии:

1. Я попытался получить доступ к файлу itkNiftiImageIO.cxx, но не смог его найти. В нем говорится, что папка miniconda не существует.

2. Извините, то, что я сказал, было неточным. Если вы измените исходный код C , вам потребуется перекомпилировать модуль python. Но вам, вероятно, не следует этого делать. Что я хотел сказать ранее, так это то, что вам нужно будет понять, как C регистрирует его, что itkWarningMacro делает, чтобы у вас был шанс захватить его с помощью Python. Вы также можете проверить страницу NIFTI на github, чтобы создать проблему или найти решения.

Ответ №2:

Отображение предупреждающих сообщений ITK можно глобально переключать itk.ProcessObject.SetGlobalWarningDisplay . Итак, вы хотите

 itk.ProcessObject.SetGlobalWarningDisplay(False)
 

См . статическую функцию itk::Object::SetGlobalWarningDisplay . Документы C здесь.

Ответ №3:

Возможно, вы захотите проверить, как отключить предупреждение в simpleitk.readImage в Python на Github.

Вы можете отключить все предупреждения SimpleITK, вызвав SetGlobalWarningDisplay .

 import SimpleITK as sitk
from medpy.io import load

sitk.ProcessObject_SetGlobalWarningDisplay(False)
image_data, image_header = load('path/to/image.nii.gz')
sitk.ProcessObject_SetGlobalWarningDisplay(True)