Как захватить вывод консоли из xarray.open_datasetPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как захватить вывод консоли из xarray.open_dataset

Сообщение Anonymous »

При доступе к удаленным наборам данных с помощью xarray.open_dataset в моей консоли иногда появляются предупреждения или ошибки.
Захват сообщений, записанных в sys.stderr или sys .stdout, безусловно, возможен (или можно также добавить управление предупреждениями, как предложил @MichaelDelgado):

Код: Выделить всё

import sys
from io import StringIO
import xarray as xr

url = "http://nomads.ncep.noaa.gov:80/dods/gefs/gefs20220909/gec00_00z_pgrb2a"

try:
sys.stderr = err = StringIO()
ds = xr.open_dataset(url_not_exist)
print(ds.dims)
except OSError as ose:
print(f"Error Log = {ose}", file=sys.stderr)
finally:
sys.stderr = sys.__stderr__
if err.tell() > 0:
err.seek(0)
print(f"Additional Info: " + err.read())
->

Код: Выделить всё

Frozen({'ens': 1, 'time': 65, 'lev': 12, 'lat': 361, 'lon': 720})
Additional Info: /home/workspace/.venv/lib/python3.8/site-packages/xarray/coding/times.py:144: SerializationWarning: Ambiguous reference date string: 1-1-1 00:00:0.0. The first value is assumed to be the year hence will be padded with zeros to remove the ambiguity (the padded reference date string is: 0001-1-1 00:00:0.0). To remove this message, remove the ambiguity by padding your reference date strings with zeros.
warnings.warn(warning_msg, SerializationWarning)
Примечание. Имейте в виду, что URL-адрес, который я использовал, действителен только в течение нескольких дней. если вы хотите попробовать это, измените дату, содержащуюся в пути (/gefs.../), на более позднюю.
Но...
В других случаях перенаправление stderr не имеет никакого эффекта. Например, когда URL-адрес ссылается на несуществующий ресурс.
Установка url = "http://nomads.ncep.noaa.gov:80/dods/gef ... 00z_pgrb2a" и выполнение тот же код дает:

Код: Выделить всё

oc_open: server error retrieving url: code=0 message="/gefs/asdf/gec00_00z_pgrb2a is not an available dataset"
Additional Info: Error Log = [Errno -70] NetCDF: DAP server error: b'http://nomads.ncep.noaa.gov:80/dods/gefs/asdf/gec00_00z_pgrb2a'

Как видите, некоторая информация была записана в консоль, и никто не может ее обработать. Он не записывается в стандартный вывод или stderr, и это потенциально может засорять журналы или просто отсутствовать в реальных журналах.
Я хочу понять, что здесь происходит. Создает ли xarray подпроцесс, который понятия не имеет о ситуации с sys.stderr? Как я могу правильно регистрировать эти сообщения или, по крайней мере, избегать того, чтобы они загромождали консоль?

Подробнее здесь: https://stackoverflow.com/questions/736 ... en-dataset
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Присоедините 2 DataSet в Java Spark, чтобы объединить их в один DataSet
    Anonymous » » в форуме JAVA
    0 Ответы
    83 Просмотры
    Последнее сообщение Anonymous
  • Улучшение производительности DataSet.ReadXml с помощью DataTable.BeginLoadData: DataSet.EnforceConstraints оставлено fal
    Anonymous » » в форуме C#
    0 Ответы
    29 Просмотры
    Последнее сообщение Anonymous
  • Как использовать tf.data.dataset с xarray
    Anonymous » » в форуме Python
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Ошибка при использовании xarray.apply_ufunc в фрагментированном массиве данных xarray
    Anonymous » » в форуме Python
    0 Ответы
    25 Просмотры
    Последнее сообщение Anonymous
  • Ошибка при использовании xarray.apply_ufunc в фрагментированном массиве данных xarray
    Anonymous » » в форуме Python
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»