6

grib2 形式の気象モデル (GFS) から最近の気象データをダウンロードする Python スクリプトで問題が発生しました。以前は機能していましたが、現在は機能していません (つまり、GFS サーバーにダウンロードする最近のファイルを使用している場合)。データにアクセスしようとすると、セグメンテーション違反が発生し、どこから始めればよいかさえわかりません。2 つの例 (動作するものと動作しないもの) を以下に示します。Linuxミントシナモンを実行しています。python-grib と python3-grib がインストールされています (バージョン: 1.9.8-1build2、ソフトウェア マネージャー経由)。

どんな提案でも大歓迎です。

Ps: セグメンテーション違反を示すファイルの例は次のとおりです: http://www.ftp.ncep.noaa.gov/data/nccf/com/gfs/prod/gfs.2015013000/ filename: gfs.t00z master.grbf003.10m.uv.grib2

古いファイルはそのサーバーに保存されていないと思います。ただし、例はここにあります: http://grib.virtual-loup-de-mer.org/archives/2014/0130/ ファイル名: gfs.t00z.master.grbf03.10m.uv.grib2

Pps: 時間がかかって申し訳ありません。1.98 から pygrib バージョン 2.0 をインストールしましたが、現在は動作しています。ああ、これを試すのに(そして実際に正しくインストールするのに)長い時間がかかりました。しかし、それだけです。いずれにせよ、すべての答えに対して大きな「慈悲」、レティシア

/usr/bin/python3.4:

Python 3.4.0 (default, Apr 11 2014, 13:05:11) 
[GCC 4.8.2] on linux
Type "help", "copyright", "credits" or "license" for more information.

作業スクリプト:

import pygrib

grbs = pygrib.open('winddata1.grib2')

for grb in grbs:

...     grb

... 

1:10 metre U wind component:m s**-1 (instant):regular_ll:heightAboveGround:level 10 m:fcst time 0 hrs:from 201411041200
2:10 metre V wind component:m s**-1 (instant):regular_ll:heightAboveGround:level 10 m:fcst time 0 hrs:from 201411041200

grb = grbs.message(1)

wind = grb.data(lat1=20,lat2=70,lon1=220,lon2=320)

quit()

/usr/bin/python3.4:

Python 3.4.0 (default, Apr 11 2014, 13:05:11) 
[GCC 4.8.2] on linux
Type "help", "copyright", "credits" or "license" for more information.

失敗したスクリプト:

import pygrib

grbs = pygrib.open('winddata2.grib2')

for grb in grbs:
...     grb
... 
1:10 metre U wind component:m s**-1 (instant):regular_ll:heightAboveGround:level 10 m:fcst time 0 hrs:from 201501220600

2:10 metre V wind component:m s**-1 (instant):regular_ll:heightAboveGround:level 10 m:fcst time 0 hrs:from 201501220600

grb = grbs.message(1)

wind = grb.data(lat1=20,lat2=70,lon1=220,lon2=320)

エラー:

Segmentation fault

編集(これが理にかなっていることを願っています)

(スクリプトtesting.pyとして)実行すると、次のようになります。

gdb -ex r --args /usr/bin/python3.4 testing.py

GNU gdb (Ubuntu 7.7-0ubuntu3) 7.7
Copyright (C) 2014 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from /usr/bin/python3.4...(no debugging symbols found)...done.
Starting program: /usr/bin/python3.4 testing.py
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
1:10 metre U wind component:m s**-1    (instant):regular_ll:heightAboveGround:level 10 m:fcst time 0 hrs:from 201501220600
2:10 metre V wind component:m s**-1 (instant):regular_ll:heightAboveGround:level 10 m:fcst time 0 hrs:from 201501220600

Program received signal SIGSEGV, Segmentation fault.
0x000000000053b684 in PyLong_AsVoidPtr ()
(gdb) bt
#0  0x000000000053b684 in PyLong_AsVoidPtr ()
#1  0x00007ffff5968da7 in ?? () from /usr/lib/python3/dist-packages/numpy/core/multiarray.cpython-34m-x86_64-linux-gnu.so
#2  0x0000000000533cd2 in PyObject_AsReadBuffer ()
#3  0x00007ffff21c9f00 in ?? () from /usr/lib/python3/dist-packages/g2clib.cpython-34m-x86_64-linux-gnu.so
#4  0x000000000057bf33 in PyEval_EvalFrameEx ()
#5  0x000000000057d3d3 in PyEval_EvalCodeEx ()
#6  0x000000000057df80 in ?? ()
#7  0x000000000043810a in PyObject_Call ()
#8  0x00000000004d3745 in ?? ()
#9  0x000000000043810a in PyObject_Call ()
#10 0x00007ffff677669c in ?? () from /usr/lib/python3/dist-packages/pygrib.cpython-34m-x86_64-linux-gnu.so
#11 0x000000000043810a in PyObject_Call ()
#12 0x00007ffff675788a in ?? () from /usr/lib/python3/dist-packages/pygrib.cpython-34m-x86_64-linux-gnu.so
#13 0x00007ffff6762ece in ?? () from /usr/lib/python3/dist-packages/pygrib.cpython-34m-x86_64-linux-gnu.so
#14 0x000000000057bf33 in PyEval_EvalFrameEx ()
#15 0x000000000057d3d3 in PyEval_EvalCodeEx ()
#16 0x000000000060ba83 in PyRun_FileExFlags ()
#17 0x000000000060bc85 in PyRun_SimpleFileExFlags ()
#18 0x000000000060d3ac in Py_Main ()
#19 0x000000000041ec0d in main ()
4

1 に答える 1

2

実行している pygrib ライブラリのバージョンは何ですか? http://pygrib.googlecode.com/svn/trunk/Changelogのリリース ノートには、segfault エラーを引き起こす問題を処理するために新しいリリースが作成されたいくつかのケースが記載されています。最新のものをプルダウンして、バグがまだ存在するかどうかを確認します。

于 2015-02-04T15:42:26.760 に答える