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?
-
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 farDawid– Dawid2012年08月31日 19:16:31 +00:00Commented Aug 31, 2012 at 19:16
1 Answer 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.
-
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– Dawid2012年09月01日 12:56:16 +00:00Commented 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– markusN2012年09月08日 19:41:27 +00:00Commented 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– Dawid2012年09月13日 17:37:03 +00:00Commented 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– markusN2012年09月14日 06:51:07 +00:00Commented Sep 14, 2012 at 6:51