Python script for GRASS - executing from PHP

General Tech Bugs & Fixes 2 years ago

0 2 0 0 0 tuteeHUB earn credit +10 pts

5 Star Rating 1 Rating

Posted on 16 Aug 2022, this text provides information on Bugs & Fixes related to General Tech. Please note that while accuracy is prioritized, the data presented might not be entirely correct or up-to-date. This information is offered for general knowledge and informational purposes only, and should not be considered as a substitute for professional advice.

Take Quiz To Earn Credits!

Turn Your Knowledge into Earnings.

tuteehub_quiz

Answers (2)

Post Answer
profilepic.png
manpreet Tuteehub forum best answer Best Answer 2 years ago

 

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?

profilepic.png
manpreet 2 years ago

 

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.


0 views   0 shares

No matter what stage you're at in your education or career, TuteeHub will help you reach the next level that you're aiming for. Simply,Choose a subject/topic and get started in self-paced practice sessions to improve your knowledge and scores.