2

I wrote the following Python script:

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

gisbase = os.environ['GISBASE'] = "/usr/lib/grass64"
gisdbase=os.path.join("PATH")
location=LOCATION NAME
mapset=MAPSETNAME
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:

<?php
...
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?

1
  • 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
    Commented Aug 31, 2012 at 19:16

1 Answer 1

1

Edited:

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.

Likewise

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

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.

4
  • 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
    Commented Sep 1, 2012 at 12:56
  • The best is to run the script as python script on command line (MSYS in case of Windows).
    – markusN
    Commented Sep 8, 2012 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
    Commented Sep 13, 2012 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
    Commented Sep 14, 2012 at 6:51

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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