<div dir="ltr"><div>Thanks Vaclav for your help with the python script running outside grass when location is predefined.  I am using an example posted in the case of no existing location and the following error came up...<br><br>alassane@alassane-MS-7593:~/Programs/grass/pythongrass$ /home/alassane/Programs/grass/pythongrass/grass_noloc.py<br>  File "/home/alassane/Programs/grass/pythongrass/grass_noloc.py", line 62<br>    else:<br>       ^<br>SyntaxError: invalid syntax<br><br></div>The program works when I comment the followings statements<br><div><br>#  define GRASS DATABASE<br>if sys.platform.startswith('win'):<br>    gisdb = os.path.join(os.getenv('APPDATA', 'grassdata')<br>else:<br>#    gisdb = os.path.join(os.getenv('HOME', 'grassdata')<br>    gisdb = os.path.join(os.getenv('/home/alassane/Data', 'grassdata')<br>#### instruction do not work<br><br><br><br></div><div>Here is the posted code used... Again your help is appreciated.<br><br></div><div>Alassane<br></div><div><br><br>#!/usr/bin/env python<br> <br># Python script to generate a new GRASS GIS 7 location simply from metadata<br># Markus Neteler, 2014<br> <br># ?? LINUX USAGE: First set LIBRARY SEARCH PATH<br>#export LD_LIBRARY_PATH=$(grass70 --config path)/lib<br>#python start_grass7_create_new_location_ADVANCED.py<br> <br># some predefined variables<br> <br># Linux<br>grass7bin = 'grass70'<br><br>#myepsg = '4326' # latlong<br>myepsg = '3044' # ETRS-TM32, <a href="http://spatialreference.org/ref/epsg/3044/">http://spatialreference.org/ref/epsg/3044/</a><br>#myfile = '/home/neteler/markus_repo/books/kluwerbook/data3rd/lidar/lidar_raleigh_nc_spm.shp'<br>myfile = '/home/alassane/Data/IPDSData/lc80400372013110lgn01_prod_ll.tif'<br>#myfile = r'C:\Dati\Padergnone\square_p95.tif'<br> <br>###########<br>import os<br>import sys<br>import subprocess<br>import shutil<br>import binascii<br>import tempfile<br> <br>########### SOFTWARE<br>    # we assume that the GRASS GIS start script is available and in the PATH<br>    # query GRASS 7 itself for its GISBASE<br> <br>startcmd = grass7bin + ' --config path'<br> <br>p = subprocess.Popen(startcmd, shell=True, <br>                     stdout=subprocess.PIPE, stderr=subprocess.PIPE)<br>out, err = p.communicate()<br>if p.returncode != 0:<br>    print >>sys.stderr, 'ERROR: %s' % err<br>    print >>sys.stderr, "ERROR: Cannot find GRASS GIS 7 start script (%s)" % startcmd<br>    sys.exit(-1)<br>if sys.platform.startswith('linux'):<br>    gisbase = out.strip('\n')<br>elif sys.platform.startswith('win'):<br>    if out.find("OSGEO4W home is") != -1:<br>        gisbase = out.strip().split('\n')[1]<br>    else:<br>        gisbase = out.strip('\n')<br>    os.environ['GRASS_SH'] = os.path.join(gisbase, 'msys', 'bin', 'sh.exe')<br> <br># Set GISBASE environment variable<br>os.environ['GISBASE'] = gisbase<br># define GRASS-Python environment<br>gpydir = os.path.join(gisbase, "etc", "python")<br>sys.path.append(gpydir)<br>########<br><br><br>#  define GRASS DATABASE<br>if sys.platform.startswith('win'):<br>    gisdb = os.path.join(os.getenv('APPDATA', 'grassdata')<br>else:<br>#    gisdb = os.path.join(os.getenv('HOME', 'grassdata')<br>    gisdb = os.path.join(os.getenv('/home/alassane/Data', 'grassdata')<br>#### instruction do not work<br> <br># override for now with TEMP dir<br>gisdb = os.path.join(tempfile.gettempdir(), 'grassdata')<br>try:<br>    os.stat(gisdb)<br>except:<br>    os.mkdir(gisdb)<br> <br># location/mapset: use random names for batch jobs<br>string_length = 16<br>location = binascii.hexlify(os.urandom(string_length))<br>mapset   = 'PERMANENT'<br>location_path = os.path.join(gisdb, location)<br> <br># Create new location (we assume that grass7bin is in the PATH)<br>#  from EPSG code:<br>#startcmd = grass7bin + ' -c epsg:' + myepsg + ' -e ' + location_path<br>#  from SHAPE or GeoTIFF file<br>startcmd = grass7bin + ' -c ' + myfile + ' -e ' + location_path<br> <br>print startcmd<br>p = subprocess.Popen(startcmd, shell=True, <br>                     stdout=subprocess.PIPE, stderr=subprocess.PIPE)<br>out, err = p.communicate()<br>if p.returncode != 0:<br>    print >>sys.stderr, 'ERROR: %s' % err<br>    print >>sys.stderr, 'ERROR: Cannot generate location (%s)' % startcmd<br>    sys.exit(-1)<br>else:<br>    print 'Created location %s' % location_path<br> <br># Now the location with PERMANENT mapset exists.<br> <br>########<br># Now we can use PyGRASS or GRASS Scripting library etc. after <br># having started the session with gsetup.init() etc<br> <br># Set GISDBASE environment variable<br>os.environ['GISDBASE'] = gisdb<br> <br># Linux: Set path to GRASS libs (TODO: NEEDED?)<br>path = os.getenv('LD_LIBRARY_PATH')<br>dir  = os.path.join(gisbase, 'lib')<br>if path:<br>    path = dir + os.pathsep + path<br>else:<br>    path = dir<br>os.environ['LD_LIBRARY_PATH'] = path<br> <br># language<br>os.environ['LANG'] = 'en_US'<br>os.environ['LOCALE'] = 'C'<br> <br><br>## Import GRASS Python bindings<br>import grass.script as grass<br>import grass.script.setup as gsetup<br> <br>###########<br># Launch session and do something<br>gsetup.init(gisbase, gisdb, location, mapset)<br> <br># say hello<br>grass.message('--- GRASS GIS 7: Current GRASS GIS 7 environment:')<br>print grass.gisenv()<br> <br># do something in GRASS now...<br> <br>grass.message('--- GRASS GIS 7: Checking projection info:')<br>in_proj = grass.read_command('g.proj', flags = 'jf')<br> <br># selective proj parameter printing<br>kv = grass.parse_key_val(in_proj)<br>print kv<br>print kv['+proj']<br> <br># print full proj parameter printing<br>in_proj = in_proj.strip()<br>grass.message("--- Found projection parameters: '%s'" % in_proj)<br> <br># show current region:<br>grass.message('--- GRASS GIS 7: Checking computational region info:')<br>in_region = grass.region()<br>grass.message("--- Computational region: '%s'" % in_region)<br> <br># do something else: r.mapcalc, v.rectify, ...<br> <br># Finally remove the temporary batch location from disk<br>print 'Removing location %s' % location_path<br>shutil.rmtree(location_path)<br> <br>sys.exit(0)<br><br><br></div></div>