From 1d3cbd91cace921f71183535ca90ca8cf38bf9ef Mon Sep 17 00:00:00 2001 From: Radim Blazek Date: Wed, 2 Mar 2016 12:26:38 +0100 Subject: [PATCH] [GRASS] set PATH and PYTHONPATH in startModule() for t.list, #14241 --- src/providers/grass/qgsgrass.cpp | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/providers/grass/qgsgrass.cpp b/src/providers/grass/qgsgrass.cpp index b4f36260567..adb1ef56206 100644 --- a/src/providers/grass/qgsgrass.cpp +++ b/src/providers/grass/qgsgrass.cpp @@ -2061,14 +2061,20 @@ QProcess *QgsGrass::startModule( const QString& gisdbase, const QString& locati out.flush(); QgsDebugMsg( gisrcFile.fileName() ); gisrcFile.close(); - QStringList environment = QProcess::systemEnvironment(); - environment.append( "GISRC=" + gisrcFile.fileName() ); - environment.append( "GRASS_MESSAGE_FORMAT=gui" ); + QProcessEnvironment environment = QProcessEnvironment::systemEnvironment(); + QStringList paths = QgsGrass::grassModulesPaths(); + // PYTHONPATH necessary for t.list.py + // PATH necessary for g.parser called by t.list.py + paths += environment.value( "PATH" ).split( QgsGrass::pathSeparator() ); + environment.insert( "PATH", paths.join( QgsGrass::pathSeparator() ) ); + environment.insert( "PYTHONPATH", QgsGrass::getPythonPath() ); + environment.insert( "GISRC", gisrcFile.fileName() ); + environment.insert( "GRASS_MESSAGE_FORMAT", "gui" ); // Normaly modules must be run in a mapset owned by user, because each module calls G_gisinit() // which checks if G_mapset() is owned by user. The check is disabled by GRASS_SKIP_MAPSET_OWNER_CHECK. - environment.append( "GRASS_SKIP_MAPSET_OWNER_CHECK=1" ); + environment.insert( "GRASS_SKIP_MAPSET_OWNER_CHECK", "1" ); - process->setEnvironment( environment ); + process->setProcessEnvironment( environment ); QgsDebugMsg( modulePath + " " + arguments.join( " " ) ); process->start( modulePath, arguments );