Group, I need help with the following. The attached script works as expected on the local machine (pyhon 2.7; Grass70) but does not work on the virtual machine (python 2.7 and Grass70). The process gets stuck at ...
..... out, err = p.communicate() if p.returncode != 0: print >>sys.stderr, 'ERROR: %s' % err print >>sys.stderr, 'ERROR: Cannot generate location (%s)' % startcmd sys.exit(-1) else: print 'Created location %s' % location_path ..... No error is reported and it does not create the temporary location. Any help/suggestion is appreciated. Alassane
#!/usr/bin/env python # Python script to generate a new GRASS GIS 7 location simply from metadata # Markus Neteler, 2014 ########### DESCRIPTION ################################### # This program computes a changed map using, solely, multi- # spectral images (3 bands or 4 bands) collected at date1 # and date2 ########################################################### # Some predefined variables ########################### import os import sys sys.path.insert(0,"/usr/lib/python2.7/dist-packages") import subprocess import shutil import binascii import tempfile from osgeo import gdal from gdalconst import * from datetime import datetime start_time = datetime.now() dir1=os.path.dirname(sys.argv[1]) #access to directory ##++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++# ########################################################################### # Python script to generate a new GRASS GIS 7 location simply from metadata # Markus Neteler, 2014 ########################################################################### # Linux grass7bin = 'grass70' myfile = sys.argv[1] startcmd = grass7bin + ' --config path' p = subprocess.Popen(startcmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) out, err = p.communicate() if p.returncode != 0: print >>sys.stderr, 'ERROR: %s' % err print >>sys.stderr, "ERROR: Cannot find GRASS GIS 7 start script (%s)" % startcmd sys.exit(-1) if sys.platform.startswith('linux'): gisbase = out.strip('\n') elif sys.platform.startswith('win'): if out.find("OSGEO4W home is") != -1: gisbase = out.strip().split('\n')[1] else: gisbase = out.strip('\n') os.environ['GRASS_SH'] = os.path.join(gisbase, 'msys', 'bin', 'sh.exe') # Set GISBASE environment variable os.environ['GISBASE'] = gisbase # define GRASS-Python environment gpydir = os.path.join(gisbase, "etc", "python") sys.path.append(gpydir) ######################################################################### # define GRASS DATABASE if sys.platform.startswith('win'): gisdb = os.path.join(os.getenv('APPDATA', 'grassdata')) else: gisdb = os.path.join(os.getenv('HOME', 'grassdata')) # override for now with TEMP dir gisdb = os.path.join(tempfile.gettempdir(), 'grassdata') try: os.stat(gisdb) except: os.mkdir(gisdb) # location/mapset: use random names for batch jobs #string_length = 16 string_length = 6 location = binascii.hexlify(os.urandom(string_length)) mapset = 'PERMANENT' location_path = os.path.join(gisdb, location) startcmd = grass7bin + ' -c ' + myfile + ' -e ' + location_path print startcmd p = subprocess.Popen(startcmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) out, err = p.communicate() if p.returncode != 0: print >>sys.stderr, 'ERROR: %s' % err print >>sys.stderr, 'ERROR: Cannot generate location (%s)' % startcmd sys.exit(-1) else: print 'Created location %s' % location_path # Now the location with PERMANENT mapset exists. ################################################### # Now we can use PyGRASS or GRASS Scripting library etc. after # having started the session with gsetup.init() etc # Set GISDBASE environment variable ################################################## os.environ['GISDBASE'] = gisdb # Linux: Set path to GRASS libs (TODO: NEEDED?) path = os.getenv('LD_LIBRARY_PATH') dir = os.path.join(gisbase, 'lib') if path: path = dir + os.pathsep + path else: path = dir os.environ['LD_LIBRARY_PATH'] = path # language os.environ['LANG'] = 'en_US' os.environ['LOCALE'] = 'C' ## Import GRASS Python bindings import grass.script as grass import grass.script.setup as gsetup ########### # Launch session and do something gsetup.init(gisbase, gisdb, location, mapset) # say hello grass.message('--- GRASS GIS 7: Current GRASS GIS 7 environment:') print grass.gisenv() # do something in GRASS now... grass.message('--- GRASS GIS 7: Checking projection info:') in_proj = grass.read_command('g.proj', flags = 'jf') # selective proj parameter printing kv = grass.parse_key_val(in_proj) print kv print kv['+proj'] # print full proj parameter printing in_proj = in_proj.strip() #grass.message("--- Found projection parameters: '%s'" % in_proj) # show current region: grass.message('--- GRASS GIS 7: Checking computational region info:') in_region = grass.region() #grass.message("--- Computational region: '%s'" % in_region) # *********************************************** # GRASS Location is now set. Begin processing. # *********************************************** end_time = datetime.now() print('Duration: {}'.format(end_time - start_time)) sys.exit(0)
_______________________________________________ UbuntuGIS mailing list Ubuntu@lists.osgeo.org https://lists.osgeo.org/mailman/listinfo/ubuntu http://trac.osgeo.org/ubuntugis/wiki