2013-10-04 5 views
1

Я пишу скрипт Python, который использует сторонние модули от GDAL. Функции GDAL не вызывают исключения при возникновении ошибки, но отправляют сообщения на stdout. Как правило, ошибки, возникающие с функциями GDAL, не гарантируют остановки процесса, и мне не нужно знать о произошедшей ошибке.Перехват сообщений от стороннего кода

Есть ли способ перехватить сообщения, которые отправляются на stdout, прежде чем они будут напечатаны в консоли? Сообщения GDAL мешают сообщениям, которые я предоставил в своем собственном коде.

ответ

1

Как описано в "Python Gotchas", вы можете включить исключения, используя gdal.UseExceptions(), например:

from osgeo import gdal 

dsrc = gdal.Open('nonexist') 
# ... silence 

gdal.UseExceptions() 

dsrc = gdal.Open('nonexist') 
# Traceback (most recent call last): 
# File "<interactive input>", line 1, in <module> 
# RuntimeError: `nonexist' does not exist in the file system, 
# and is not recognised as a supported dataset name. 

Вы всегда можете затем использовать tryexcept блок- получить фактическое сообщение об ошибке строки:

try: 
    dsrc = gdal.Open('nonexist') 
except RuntimeError as e: 
    print(str(e)) 

который выдает сообщение об ошибке:

`nonexist 'не существует в файловой системе, и не признается в качестве поддерживаемого имени набора данных.

+0

Я видел Python Gotchas и читал о 'gdal.UseExceptions()'. Мне было непонятно, будут ли исключения и отключать сообщения, или я получу исключения и сообщения? – Brian

+0

В основном это превращает сообщения stderr в исключения RuntimeError, которые можно обрабатывать любым возможным способом, который вам нужен. –

Смежные вопросы