Created
October 31, 2014 20:24
-
-
Save max-nova/5cd876bc7bfefe5b7c9e to your computer and use it in GitHub Desktop.
Code to replicate a bug in grass.pipe_command
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import os | |
import tempfile | |
import shutil | |
import grass.script as grass | |
import grass.script.setup as gsetup | |
# first do: | |
# mkdir /tmp/grasstest | |
# wget http://grass.osgeo.org/sampledata/north_carolina/nc_spm_latest.zip | |
# unzip *.zip | |
GIS_BASE = '/usr/lib/grass64/' | |
GRASS_DB = '/tmp/grasstest/' | |
loc_name = 'nc_spm_08' | |
rast_name = 'elev_ned_30m' | |
def export(loc, name, out_fn='/tmp/exported.tif'): | |
gsetup.init(GIS_BASE, GRASS_DB, loc, 'PERMANENT') | |
cmd = 'r.out.gdal' | |
kwargs = { | |
'quiet': True, | |
'flags': 'c', | |
'input': name, | |
'output': out_fn | |
} | |
process = grass.pipe_command(cmd, **kwargs) | |
stdout, stderr = process.communicate() | |
def run(): | |
i = 0 | |
while True: | |
i += 1 | |
print 'Iteration %s' % i | |
work_dir = tempfile.mkdtemp() | |
out_fn = os.path.join(work_dir, 'rast.tif') | |
export(loc_name, rast_name, out_fn) | |
shutil.rmtree(work_dir) | |
run() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Since this can pop out in some search, it might be useful to note that the problem was not in
pipe_command
but in subprocess call hitting operating system limit for environment + parameters. The environment (env vars + their values) was full of paths accumulated from gsetup.init calls.The solution is not to call
gsetup.init
repetitively (it is enough just to all it once and then switch Mapsets if needed). See also https://trac.osgeo.org/grass/ticket/2468 and https://gist.github.com/max-nova/487a82de00651a33f2c2.