[GRASS-dev] pyGRASS return g.mlist() output into a python list

Pietro peter.zamb at gmail.com
Mon Sep 9 14:04:17 PDT 2013


Hi Yann,


On Mon, Sep 9, 2013 at 8:14 AM, Yann Chemin <ychemin at gmail.com> wrote:
> so the pattern returns to the CLI not to the output list "list"
>
> list=g.mlist(type='rast',pattern='interpolation_*') <= not working

it is correct that g.mlist return None, because you are just calling a
GRASS module that write to the stdout and not a python function that
return a python object, therefore you can save the stdout and then
parse it with:

{{{
>>> from grass.pygrass.modules.shortcuts import general as g
>>> import subprocess as sub
>>> gl = g.mlist
>>> gl(type='rast', pattern='elev-*', stdout=sub.PIPE)
>>> gl.outputs.stdout.split()
['elev-000-000', 'elev-000-001', 'elev-000-002', 'elev-001-000',
'elev-001-001', 'elev-001-002', 'elev-002-000', 'elev-002-001',
'elev-002-002']
}}}

or you can use the "glist" method of the Mapset class

{{{
>>> from grass.pygrass.gis import Mapset
>>> m = Mapset()
>>> m.glist('rast', pattern='elev-*')
['elev-002-000',  'elev-000-000',  'elev-000-002',  'elev-000-001',
'elev-001-001',  'elev-002-002',  'elev-002-001',  'elev-001-000',
'elev-001-002']
}}}

that use the "G_list" function through ctypes and therefore is faster.
If you choose the first solution is better if you use directly the
function in python.script.core.mlist_grouped as suggested by Anna.

Best regards

Pietro


More information about the grass-dev mailing list