Spuštění skriptu

Mějme jednoduchý skript, který vypíše výměru města Pardubice v hektarech. K tomu použijeme vektorovou mapu obce_polygon z mapsetu ruian.

#!/usr/bin/env python

from grass.pygrass.modules import Module
from subprocess import PIPE

mesto='pardubice'
nazev='Pardubice'

# atributovy dotaz
Module('v.extract', input='obce_polygon@ruian', output=mesto,
       where="nazev='{}'".format(nazev), overwrite=True, quiet=True)
# vypocet vymery
cat, area = Module('v.to.db', map=mesto,
                   option='area', flags='p', columns='area',
                   quiet=True, stdout_=PIPE).outputs.stdout.split('|')
# vypsani vysledku
print("{0}: {1:.2f} ha".format(nazev, float(area) / 1e4))
# odstraneni vytvorene mapy
Module('g.remove', type='vector', name=mesto, flags='f', quiet=True)

Tento soubor (ke stažení zde) uložte kamkoliv na disk. Bližší popis kódu nechme na kapitolu Python a PyGRASS.

Spuštění z GUI

Nejjednodušší cestou je spustit skript z grafického uživatelského rozhraní a to z menu správce vrstev File ‣ Launch script anebo z nástrojové lišty.

../_images/lmgr-launch-script.png

Obr. 2 Spuštění skriptu z nástrojové lišty správce vrstev.

Po výběru skriptu si GRASS zkontroluje, zda je skript spustitelný a zda je tzv. v spouštěcí cestě. V připadě, že tomu tak není, tak se objeví příslušné dialogy, které potvrdíme.

../_images/launch-permission.png

Obr. 3 Dialog pro nastavení spustitelnosti.

../_images/launch-path.png

Obr. 4 Dialog pro přidání adresáře se skriptem do spouštěcí cesty.

Skript se poté spustí, výpis je přesměrován do okna správce vrstev.

../_images/launch-output.png

Obr. 5 Výsledek spuštění skriptu v okně správce vrstev.

Skript můžete také spustit zadáním úplné cesty v přikazové řádce správce vrstev.

../_images/lmgr-launch-cmd.png

Obr. 6 Spuštění skriptu z příkazové řádky správce vrstev.

Spuštění z příkazové řádky

Nejprve nastavíme právo spustitelnosti pomocí příkazu chmod (jde o Unixový nástroj, pod Windows použijeme správce souborů) a poté skript spustíme.

Návod nastavení spustitelnosti a spuštění skriptu z příkazové řádky

chmod +x obce_vymera-v1.py
./obce_vymera-v1.py

Předpokládejme, že adresář se skriptem není ve spouštěcí cestě, spustíme jej tedy přes ./.

Poznámka

Pro přidání adresáře do spouštěcí cesty můžete použít proměnnou prostředí GRASS_ADDON_PATH. Pokud je tato proměnná definována před spuštěním systému GRASS, tak se její obsah automaticky vloží do spouštěcí cesty.

Proměnné prostředí systému GRASS jsou uloženy v souboru bashrc (v případě Windows jde o soubor env.bat) v konfiguračním adresáři systému GRASS. Ten je umístěn pod Linuxem v $HOME/.grass7, v případě Windows $APPDATA\GRASS7.

Např.

export GRASS_ADDON_PATH=/opt/bin:$HOME/grassbin

bude mít za následek, že se při spuštění systému GRASS přidají do spouštěcí cesty dva adresáře: /opt/bin a grassbin z domovského adresáře aktivního uživatele.

V případě OS Windows by proměnná mohla vypadat následovně:

set GRASS_ADDON_PATH=C:\opt\bin;%HOME%\grassbin

Potom lze skript spustit jako jakýkoliv příkaz systému GRASS či operačního systému.

obce_vymera-v1.py

Spuštění jako batch job

Pokud je definována proměnná prostředí GRASS_BATCH_JOB, tak GRASS spustí soubor uvedený jako hodnota této proměnné. Po doběhnutí skriptu se GRASS sám ukončí.

export GRASS_BATCH_JOB=/home/martin/skripty/obce_vymera-v1.py
grass70 /opt/grassdata/gismentors/user1

Poznámka

GRASS v tomto případě spouštíme s mapsetem user1 v lokaci gismentors umístěné v adresáři /opt/grassdata. Pokud bysme tento parametr vynechali, tak GRASS spustí skript v posledně navštíveném mapsetu.

Výstup může vypadat následovně:

Cleaning up temporary files...
Starting GRASS GIS...
Executing '/home/martin/grassbin/obce_vymera-v1.py' ...
Pardubice: 8263.98 ha
Execution of '/home/martin/grassbin/obce_vymera-v1.py' finished.
Cleaning up temporary files...

Proměnnou prostředí deaktivujeme pomocí příkazu unset.

unset GRASS_BATCH_JOB

Poté se GRASS bude chovat po startu již standardně.

Spuštění explicitně

Ve všech výše zmíněných příkladech vždy systém GRASS spouštíme explicitně. To není nutné, stačí ve skriptu nastavit cestu k instalaci systému GRASS (proměnná prostředí GISBASE) a datům (tj. lokaci a mapset) - pomocí funkce init().

#!/usr/bin/env python

import os
import sys

gisbase = os.environ['GISBASE'] = '/usr/lib/grass70'

sys.path.insert(0, os.path.join(gisbase, 'etc', 'python'))
import grass.script.setup as gsetup
from grass.pygrass.vector import VectorTopo

gsetup.init(gisbase, '/opt/grassdata', 'gismentors', 'user1')

...