I wrote the following Python script:

#!/usr/bin/env python
import os
import sys

gisbase = os.environ['GISBASE'] = "/usr/lib/grass64"
sys.path.append(os.path.join(os.environ['GISBASE'], "etc", "python"))

import grass.script as grass
import grass.script.setup as gsetup
import grass.script as grass
gsetup.init(gisbase, gisdbase, location, mapset)
print "one"

grass.run_command('v.in.ascii','-o', input='/opt/lampp/htdocs/project/basic_statistics/sites_grass.csv', output='sites',fs=",",skip='1', x='9', y='10')
print "two"

grass.run_command('v.db.addcol', map='sites', columns="height INTEGER")
grass.run_command('g.region', rast="dem21")
grass.run_command('v.what.rast',vector='sites', raster='dem21', column='height')
print "three"

grass.run_command('v.out.ascii','-o', input="sites",output="sites_geography_stats.csv", columns='height')
print "four"

It runs without any problems when I simply execute it from UNIX terminal (/.FILENAME.py). However, my goal is to execute it from a PHP code:

echo system("./FILENAME.py");

When I run the PHP code the following output is printed to the website: one two three four

Sadly, the sites_geography_stats.csv file is not created. It looks that the python script is executed from php but its GRASS-related part is ignored. Does anybody have any ideas how to fix it?

  • I think I should add that all this php-python stuff is a part of a Web-application I am developing now. I use lampp and I've run it only on localhost so far – Dawid Aug 31 '12 at 19:16


I have tried the script simply on command line as python script and found the errors:

grass.run_command('v.in.ascii','-o', ...

should be

grass.run_command('v.in.ascii', overwrite = True, ...

Generally flags are indicated like this:

flags = 'r'

but in case of the overwrite (--o) this does not apply due to the doubled dash.



should be

grass.run_command('v.out.ascii', overwrite = True,

Eventually you should not use integer but double precision to avoid "WARNING: Raster type is float and column type is integer, some data lost!!" in the v.what.rast call.

With these changes the script works properly with GRASS 6.

BTW: See here for a sample Python script.

  • my bad. I should have written that in the script I use the real names of my GRASS location and mapset instead of 'LOCATION NAME' and 'MAPSET NAME'. likewise, in gisdbase=os.path.join("PATH") the actual directory path is provided instead of "PATH" – Dawid Sep 1 '12 at 12:56
  • The best is to run the script as python script on command line (MSYS in case of Windows). – markusN Sep 8 '12 at 19:41
  • many thanks for your suggestions. actually, while run on command line the script works fine.the problem, however, occurs when I try to run it via a web browser. I.e.there is a website I created, mostly php-based. within the website's code there is a line <<echo system("./FILENAME.py");>> which should execute a script of FILENAME.py and print out its results. Unfortunately when open the website, the grass-part of FILENAME.py code is omitted (i.e."one" "two" etc are printed but the csv file isn't created). – Dawid Sep 13 '12 at 17:37
  • You may add the execution of "g.gisenv" after "one" to get the session settings printed. Perhaps some paths are not yet right? – markusN Sep 14 '12 at 6:51

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.