Take the 2-minute tour ×
Geographic Information Systems Stack Exchange is a question and answer site for cartographers, geographers and GIS professionals. It's 100% free, no registration required.

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?

share|improve this question
    
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
add comment

1 Answer

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.

share|improve this answer
    
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
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

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