2013-10-04 213 views
1

我正在編寫一個使用來自GDAL的第三方模塊的Python腳本。發生錯誤時,GDAL函數不會引發異常,但會將消息發送到stdout。通常,使用GDAL函數時發生的錯誤不能保證停止進程,並且我不需要知道發生的錯誤。截取來自第三方代碼的郵件

有沒有一種方法可以攔截正在發送到stdout的消息,然後將它們打印在控制檯中?消息會干擾我在自己的代碼中提供的消息。

回答

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異常,可以用任何您想要的方式處理它。 –