[GRASS-SVN] r56828 - grass/trunk/lib/init
svn_grass at osgeo.org
svn_grass at osgeo.org
Thu Jun 20 07:03:07 PDT 2013
Author: lucadelu
Date: 2013-06-20 07:03:07 -0700 (Thu, 20 Jun 2013)
New Revision: 56828
Modified:
grass/trunk/lib/init/grass.py
Log:
fix string format and PEP 8
Modified: grass/trunk/lib/init/grass.py
===================================================================
--- grass/trunk/lib/init/grass.py 2013-06-20 14:00:09 UTC (rev 56827)
+++ grass/trunk/lib/init/grass.py 2013-06-20 14:03:07 UTC (rev 56828)
@@ -11,10 +11,10 @@
# Converted to Python (based on init.sh) by Glynn Clements
# Martin Landa <landa.martin gmail.com>
# Luca Delucchi <lucadeluge at gmail.com>
-# PURPOSE: Sets up environment variables, parses any remaining
+# PURPOSE: Sets up environment variables, parses any remaining
# command line options for setting the GISDBASE, LOCATION,
-# and/or MAPSET. Finally it starts GRASS with the appropriate user
-# interface and cleans up after it is finished.
+# and/or MAPSET. Finally it starts GRASS with the appropriate
+# user interface and cleans up after it is finished.
# COPYRIGHT: (C) 2000-2013 by the GRASS Development Team
#
# This program is free software under the GNU General
@@ -33,20 +33,20 @@
import tempfile
# Variables substituted during build process
-if os.environ.has_key('GISBASE'):
+if 'GISBASE' in os.environ:
gisbase = os.environ['GISBASE']
else:
gisbase = "@GISBASE@"
cmd_name = "@START_UP@"
grass_version = "@GRASS_VERSION_NUMBER@"
ld_library_path_var = '@LD_LIBRARY_PATH_VAR@'
-if os.environ.has_key('GRASS_PROJSHARE'):
+if 'GRASS_PROJSHARE' in os.environ:
config_projshare = os.environ['GRASS_PROJSHARE']
else:
config_projshare = "@CONFIG_PROJSHARE@"
# configuration directory
-grass_env_file = None # see check_shell()
+grass_env_file = None # see check_shell()
if sys.platform == 'win32':
grass_config_dirname = "GRASS7"
grass_config_dir = os.path.join(os.getenv('APPDATA'), grass_config_dirname)
@@ -58,7 +58,7 @@
# i18N
import gettext
-gettext.install('grasslibs', os.path.join(gisbase, 'locale'), unicode = True)
+gettext.install('grasslibs', os.path.join(gisbase, 'locale'), unicode=True)
tmpdir = None
lockfile = None
@@ -67,40 +67,46 @@
create_new = None
grass_gui = None
+
def warning(text):
sys.stderr.write(_("WARNING") + ': ' + text + os.linesep)
+
def try_remove(path):
try:
os.remove(path)
except:
pass
+
def try_rmdir(path):
try:
os.rmdir(path)
except:
pass
+
def clean_env():
env_curr = read_gisrc()
- env_new = {}
+ env_new = {}
for k,v in env_curr.iteritems():
if 'MONITOR' not in k:
env_new[k] = v
-
+
write_gisrc(env_new)
+
def cleanup_dir(path):
if not path:
return
-
- for root, dirs, files in os.walk(path, topdown = False):
+
+ for root, dirs, files in os.walk(path, topdown=False):
for name in files:
try_remove(os.path.join(root, name))
for name in dirs:
try_rmdir(os.path.join(root, name))
-
+
+
def cleanup():
tmpdir, lockfile, remove_lockfile
# all exits after setting up tmp dirs (system/location) should
@@ -111,39 +117,46 @@
tmpdir_loc = os.path.join(location, ".tmp")
cleanup_dir(tmpdir_loc)
try_rmdir(tmpdir_loc)
-
+
# remove lock-file if requested
if lockfile and remove_lockfile:
try_remove(lockfile)
-
+
+
def fatal(msg):
sys.exit(msg)
+
def message(msg):
sys.stderr.write(msg + "\n")
sys.stderr.flush()
+
def readfile(path):
f = open(path, 'r')
s = f.read()
f.close()
return s
+
def writefile(path, s):
f = open(path, 'w')
f.write(s)
f.close()
+
def call(cmd, **kwargs):
if windows:
kwargs['shell'] = True
return subprocess.call(cmd, **kwargs)
+
def Popen(cmd, **kwargs):
if windows:
kwargs['shell'] = True
return subprocess.Popen(cmd, **kwargs)
+
def gfile(*args):
return os.path.join(gisbase, *args)
@@ -208,9 +221,10 @@
def help_message():
t = string.Template(help_text)
- s = t.substitute(CMD_NAME = cmd_name, DEFAULT_GUI = default_gui)
+ s = t.substitute(CMD_NAME=cmd_name, DEFAULT_GUI=default_gui)
sys.stderr.write(s)
+
def create_tmp():
global tmpdir
## use $TMPDIR if it exists, then $TEMP, otherwise /tmp
@@ -222,7 +236,8 @@
if not tmp:
tmp = tempfile.gettempdir()
if tmp:
- tmpdir = os.path.join(tmp, "grass7-%s-%s" % (user, gis_lock))
+ tmpdir = os.path.join(tmp, "grass7-%(user)s-%(lock)s" % {'user': user,
+ 'lock': gis_lock})
try:
os.mkdir(tmpdir, 0700)
except:
@@ -230,22 +245,25 @@
if not tmp:
for ttmp in ("/tmp", "/var/tmp", "/usr/tmp"):
tmp = ttmp
- tmpdir = os.path.join(tmp, "grass7-%s-%s" % (user, gis_lock))
+ tmpdir = os.path.join(tmp, "grass7-%(user)s-%(lock)s" % {
+ 'user': user, 'lock': gis_lock})
try:
os.mkdir(tmpdir, 0700)
except:
tmp = None
if tmp:
- break
+ break
if not tmp:
- fatal(_("Unable to create temporary directory <grass7-%s-%s>! Exiting.") % (user, gis_lock))
+ fatal(_("Unable to create temporary directory <grass7-%(user)s-" \
+ "%(lock)s>! Exiting.") % {'user': user, 'lock': gis_lock})
+
def create_gisrc():
global gisrc, gisrcrc
# Set the session grassrc file
gisrc = os.path.join(tmpdir, "gisrc")
os.environ['GISRC'] = gisrc
-
+
# remove invalid GISRC file to avoid disturbing error messages:
try:
s = readfile(gisrcrc)
@@ -254,25 +272,27 @@
s = None
except:
s = None
-
+
# Copy the global grassrc file to the session grassrc file
if s:
writefile(gisrc, s)
-
+
+
def read_gisrc():
kv = {}
try:
f = open(gisrc, 'r')
except IOError:
return kv
-
+
for line in f:
k, v = line.split(':', 1)
kv[k.strip()] = v.strip()
f.close()
-
+
return kv
+
def read_env_file(path):
kv = {}
f = open(path, 'r')
@@ -282,12 +302,14 @@
f.close()
return kv
+
def write_gisrc(kv):
f = open(gisrc, 'w')
for k, v in kv.iteritems():
f.write("%s: %s\n" % (k, v))
f.close()
+
def read_gui():
global grass_gui
# At this point the GRASS user interface variable has been set from the
@@ -307,18 +329,19 @@
else:
# Set the GRASS user interface to the default if needed
grass_gui = default_gui
-
+
if not grass_gui:
grass_gui = default_gui
-
+
if grass_gui == 'gui':
grass_gui = default_gui
-
+
# FIXME oldtcltk, gis.m, d.m no longer exist
if grass_gui in ['d.m', 'gis.m', 'oldtcltk', 'tcltk']:
warning(_("GUI <%s> not supported in this version") % grass_gui)
grass_gui = default_gui
-
+
+
def path_prepend(dir, var):
path = os.getenv(var)
if path:
@@ -327,6 +350,7 @@
path = dir
os.environ[var] = path
+
def path_append(dir, var):
path = os.getenv(var)
if path:
@@ -335,13 +359,14 @@
path = dir
os.environ[var] = path
+
def set_paths():
# addons (path)
addon_path = os.getenv('GRASS_ADDON_PATH')
if addon_path:
for path in addon_path.split(os.pathsep):
path_prepend(addon_path, 'PATH')
-
+
# addons (base)
addon_base = os.getenv('GRASS_ADDON_BASE')
if not addon_base:
@@ -349,14 +374,14 @@
os.environ['GRASS_ADDON_BASE'] = addon_base
path_prepend(os.path.join(addon_base, 'scripts'), 'PATH')
path_prepend(os.path.join(addon_base, 'bin'), 'PATH')
-
+
# standard installation
path_prepend(gfile('scripts'), 'PATH')
path_prepend(gfile('bin'), 'PATH')
-
+
# Set PYTHONPATH to find GRASS Python modules
path_prepend(gfile('etc', 'python'), 'PYTHONPATH')
-
+
# set path for the GRASS man pages
grass_man_path = os.path.join(gisbase, 'docs', 'man')
addons_man_path = os.path.join(addon_base, 'docs', 'man')
@@ -368,14 +393,14 @@
else:
try:
nul = open(os.devnull, 'w')
- p = Popen(['manpath'], stdout = subprocess.PIPE, stderr = nul)
+ p = Popen(['manpath'], stdout=subprocess.PIPE, stderr=nul)
nul.close()
s = p.stdout.read()
p.wait()
sys_man_path = s.strip()
except:
pass
-
+
if sys_man_path:
os.environ['MANPATH'] = sys_man_path
path_prepend(addons_man_path, 'MANPATH')
@@ -383,12 +408,13 @@
else:
os.environ['MANPATH'] = addons_man_path
path_prepend(grass_man_path, 'MANPATH')
-
+
# Add .py (Python) to list of executable extensions to search for
# in MS-Windows PATH
if windows:
path_append('.PY', 'PATHEXT')
-
+
+
def find_exe(pgm):
for dir in os.getenv('PATH').split(os.pathsep):
path = os.path.join(dir, pgm)
@@ -396,6 +422,7 @@
return path
return None
+
def set_defaults():
# GRASS_PAGER
if not os.getenv('GRASS_PAGER'):
@@ -408,55 +435,60 @@
else:
pager = "cat"
os.environ['GRASS_PAGER'] = pager
-
+
# GRASS_PYTHON
if not os.getenv('GRASS_PYTHON'):
if windows:
os.environ['GRASS_PYTHON'] = "python.exe"
else:
os.environ['GRASS_PYTHON'] = "python"
-
+
# GRASS_GNUPLOT
if not os.getenv('GRASS_GNUPLOT'):
os.environ['GRASS_GNUPLOT'] = "gnuplot -persist"
-
+
# GRASS_PROJSHARE
if not os.getenv('GRASS_PROJSHARE'):
os.environ['GRASS_PROJSHARE'] = config_projshare
-
+
+
def set_browser():
# GRASS_HTML_BROWSER
browser = os.getenv('GRASS_HTML_BROWSER')
if not browser:
if macosx:
- # OSX doesn't execute browsers from the shell PATH - route thru a script
+ # OSX doesn't execute browsers from the shell PATH - route thru a
+ # script
browser = gfile('etc', "html_browser_mac.sh")
os.environ['GRASS_HTML_BROWSER_MACOSX'] = "-b com.apple.helpviewer"
-
+
if windows or cygwin:
# MinGW startup moved to into init.bat
browser = "explorer"
else:
# the usual suspects
- browsers = [ "xdg-open", "htmlview", "konqueror", "mozilla", "mozilla-firefox",
- "firefox", "iceweasel", "opera", "netscape", "dillo", "lynx", "links", "w3c" ]
+ browsers = ["xdg-open", "htmlview", "konqueror", "mozilla",
+ "mozilla-firefox", "firefox", "iceweasel", "opera",
+ "netscape", "dillo", "lynx", "links", "w3c"]
for b in browsers:
if find_exe(b):
browser = b
break
-
+
elif macosx:
- # OSX doesn't execute browsers from the shell PATH - route thru a script
+ # OSX doesn't execute browsers from the shell PATH - route thru a
+ # script
os.environ['GRASS_HTML_BROWSER_MACOSX'] = "-b %s" % browser
browser = gfile('etc', "html_browser_mac.sh")
-
+
if not browser:
warning(_("Searched for a web browser, but none found"))
# even so we set konqueror to make lib/gis/parser.c happy:
browser = "konqueror"
-
+
os.environ['GRASS_HTML_BROWSER'] = browser
+
def grass_intro():
intro = r"""
WELCOME TO GRASS %s
@@ -473,11 +505,11 @@
http://www.grass-gis.org
""" % grass_version
sys.stderr.write(intro)
-
+
sys.stderr.write("\n")
sys.stderr.write(_("Hit RETURN to continue"))
sys.stdin.readline()
-
+
# for convenience, define pwd as GISDBASE:
s = r"""GISDBASE: %s
LOCATION_NAME: <UNKNOWN>
@@ -485,6 +517,7 @@
""" % os.getcwd()
writefile(gisrc, s)
+
def check_gui():
global grass_gui, wxpython_base
# Check if we are running X windows by checking the DISPLAY variable
@@ -492,9 +525,8 @@
# Check if python is working properly
if grass_gui == 'wxpython':
nul = open(os.devnull, 'w')
- p = Popen([os.environ['GRASS_PYTHON']],
- stdin = subprocess.PIPE,
- stdout = nul, stderr = nul)
+ p = Popen([os.environ['GRASS_PYTHON']], stdin=subprocess.PIPE,
+ stdout=nul, stderr=nul)
nul.close()
p.stdin.write("variable=True")
p.stdin.close()
@@ -511,7 +543,7 @@
"Hit RETURN to continue.\n"))
sys.stdin.readline()
grass_gui = 'text'
-
+
else:
# Display a message if a graphical interface was expected
if grass_gui != 'text':
@@ -522,7 +554,7 @@
"Hit RETURN to continue"""))
sys.stdin.readline()
grass_gui = 'text'
-
+
# Save the user interface variable in the grassrc file - choose a temporary
# file name that should not match another file
if os.access(gisrc, os.F_OK):
@@ -530,80 +562,93 @@
kv['GUI'] = grass_gui
write_gisrc(kv)
-def non_interactive(arg, geofile = None):
+
+def non_interactive(arg, geofile=None):
global gisdbase, location_name, mapset, location
# Try non-interactive startup
l = None
-
+
if arg == '-':
if location:
l = location
else:
l = arg
-
+
if l:
if l == '.':
l = os.getcwd()
elif not os.path.isabs(l):
l = os.path.abspath(l)
-
+
l, mapset = os.path.split(l)
if not mapset:
l, mapset = os.path.split(l)
l, location_name = os.path.split(l)
gisdbase = l
-
+
if gisdbase and location_name and mapset:
location = os.path.join(gisdbase, location_name, mapset)
-
+
if not os.access(os.path.join(location, "WIND"), os.R_OK):
if location_name == "PERMANENT":
fatal(_("<%s> is not a valid GRASS location") % location)
else:
# the user wants to create mapset on the fly
if create_new:
- if not os.access(os.path.join(os.path.join(gisdbase, location_name,
- "PERMANENT", "DEFAULT_WIND")), os.F_OK):
+ if not os.access(os.path.join(os.path.join(gisdbase,
+ location_name,
+ "PERMANENT",
+ "DEFAULT_WIND")),
+ os.F_OK):
# create new location
gisdbase = os.path.join(gisdbase, location_name)
location_name = mapset
mapset = "PERMANENT"
- if os.access(os.path.join(os.path.join(gisdbase, location_name,
- "PERMANENT", "DEFAULT_WIND")), os.F_OK):
- fatal(_("Failed to create new location. The location <%s> already exists." % location_name))
+ if os.access(os.path.join(os.path.join(gisdbase,
+ location_name,
+ "PERMANENT",
+ "DEFAULT_WIND")),
+ os.F_OK):
+ fatal(_("Failed to create new location. The " \
+ "location <%s> already exists." % location_name))
sys.path.append(gfile('etc', 'python'))
from grass.script import core as grass
try:
if geofile and geofile.find('EPSG:') > -1:
epsg = geofile.split(':', 1)[1]
- grass.create_location(gisdbase, location_name, epsg = epsg)
+ grass.create_location(gisdbase, location_name,
+ epsg=epsg)
else:
- grass.create_location(gisdbase, location_name, filename = geofile)
+ grass.create_location(gisdbase, location_name,
+ filename=geofile)
except grass.ScriptError, e:
- fatal(e.value.strip('"').strip("'").replace('\\n', os.linesep))
+ fatal(e.value.strip('"').strip("'").replace('\\n',
+ os.linesep))
else:
# create new mapset
os.mkdir(location)
# copy PERMANENT/DEFAULT_WIND to <mapset>/WIND
- s = readfile(os.path.join(gisdbase, location_name, "PERMANENT", "DEFAULT_WIND"))
+ s = readfile(os.path.join(gisdbase, location_name,
+ "PERMANENT", "DEFAULT_WIND"))
writefile(os.path.join(location, "WIND"), s)
message(_("Missing WIND file fixed"))
else:
fatal(_("<%s> is not a valid GRASS location") % location)
-
+
if os.access(gisrc, os.R_OK):
kv = read_gisrc()
else:
kv = {}
-
+
kv['GISDBASE'] = gisdbase
kv['LOCATION_NAME'] = location_name
kv['MAPSET'] = mapset
write_gisrc(kv)
else:
- fatal(_("GISDBASE, LOCATION_NAME and MAPSET variables not set properly.\n"
- "Interactive startup needed."))
-
+ fatal(_("GISDBASE, LOCATION_NAME and MAPSET variables not set properly"
+ ".\nInteractive startup needed."))
+
+
def set_data():
# User selects LOCATION and MAPSET if not set
if not location:
@@ -617,12 +662,13 @@
# Shouldn't need this but you never know
fatal(_("Invalid user interface specified - <%s>.\n"
"Use the --help option to see valid interface names.") % grass_gui)
-
+
+
def gui_startup():
if grass_gui == 'wxpython':
thetest = call([os.getenv('GRASS_PYTHON'),
gfile(wxpython_base, "gis_set.py")])
-
+
if thetest == 0:
pass
elif thetest == 1:
@@ -633,7 +679,7 @@
"Switching to text mode now.\n\n"
"Hit RETURN to continue..."))
sys.stdin.readline()
-
+
os.execlp(cmd_name, "-text")
sys.exit(1)
elif thetest == 2:
@@ -643,7 +689,8 @@
else:
fatal(_("Invalid return code from GUI startup script.\n"
"Please advise GRASS developers of this error."))
-
+
+
def load_gisrc():
global gisdbase, location_name, mapset, location
kv = read_gisrc()
@@ -656,30 +703,32 @@
"LOCATION_NAME=%(location)s\n"
"MAPSET=%(mapset)s\n\n"
"Check the <%s(file)> file." % \
- { 'gisbase' : gisdbase, 'location' : location_name,
- 'mapset' : mapset, 'file' : gisrcrc }))
-
+ {'gisbase': gisdbase, 'location': location_name,
+ 'mapset': mapset, 'file': gisrcrc}))
+
location = os.path.join(gisdbase, location_name, mapset)
+
# load environmental variables from grass_env_file
def load_env():
if not os.access(grass_env_file, os.R_OK):
return
-
+
for line in readfile(grass_env_file).split(os.linesep):
try:
k, v = map(lambda x: x.strip(), line.strip().split(' ', 1)[1].split('=', 1))
except:
continue
os.environ[k] = v
-
+
+
def set_language():
import locale
-
+
language = os.getenv('LANG')
if not language:
return
-
+
language = language.split('.')[0] # Split off ignored .encoding part if present
orig_language = language
try:
@@ -707,65 +756,68 @@
# language = default_locale[0]
# else:
language = 'C'
-
+
# Set up environment for subprocesses
- for lc in ('LC_CTYPE', 'LC_MESSAGES', 'LC_TIME', 'LC_COLLATE', 'LC_MONETARY', 'LC_PAPER',
- 'LC_NAME', 'LC_ADDRESS', 'LC_TELEPHONE', 'LC_MEASUREMENT', 'LC_IDENTIFICATION'):
+ for lc in ('LC_CTYPE', 'LC_MESSAGES', 'LC_TIME', 'LC_COLLATE',
+ 'LC_MONETARY', 'LC_PAPER', 'LC_NAME', 'LC_ADDRESS',
+ 'LC_TELEPHONE', 'LC_MEASUREMENT', 'LC_IDENTIFICATION'):
os.environ[lc] = language
-
+
# Some code in GRASS might not like other decimal separators than .
# Other potential sources for problems are: LC_TIME LC_CTYPE
locale.setlocale(locale.LC_NUMERIC, 'C')
os.environ['LC_NUMERIC'] = 'C'
if os.getenv('LC_ALL'):
- del os.environ['LC_ALL'] # Remove LC_ALL to not override LC_NUMERIC
-
+ del os.environ['LC_ALL'] # Remove LC_ALL to not override LC_NUMERIC
+
# Even if setting locale has failed, let's set LANG in a hope,
# that UI will use it GRASS texts will be in selected language,
# system messages (i.e. OK, Cancel etc.) - in system default
# language
os.environ['LANGUAGE'] = orig_language
os.environ['LANG'] = orig_language
-
+
# Calling gettext.install twice seems to allow to see also
# localized startup messages Black magic ;)
- gettext.install('grasslibs', os.path.join(gisbase, 'locale'), unicode = True)
-
+ gettext.install('grasslibs', os.path.join(gisbase, 'locale'), unicode=True)
+
+
def check_lock():
global lockfile
if not os.path.exists(location):
fatal(_("Path '%s' doesn't exist") % location)
-
+
# Check for concurrent use
lockfile = os.path.join(location, ".gislock")
- ret = call([gfile("etc", "lock"),
- lockfile,
- "%d" % os.getpid()])
-
+ ret = call([gfile("etc", "lock"), lockfile, "%d" % os.getpid()])
if ret == 0:
msg = None
elif ret == 2:
- msg = _("%(user)s is currently running GRASS in selected mapset (file %(file)s found). "
- "Concurrent use not allowed." % \
- { 'user' : user, 'file' : lockfile })
+ msg = _("%(user)s is currently running GRASS in selected mapset (" \
+ "file %(file)s found). Concurrent use not allowed." % {
+ 'user': user, 'file': lockfile})
else:
msg = _("Unable to properly access '%s'.\n"
"Please notify system personel.") % lockfile
-
+
if msg:
if grass_gui == "wxpython":
- thetest = call([os.getenv('GRASS_PYTHON'), os.path.join(wxpython_base, "gis_set_error.py"), msg])
+ thetest = call([os.getenv('GRASS_PYTHON'),
+ os.path.join(wxpython_base, "gis_set_error.py"),
+ msg])
else:
global remove_lockfile
remove_lockfile = False
fatal(msg)
-
+
+
def make_fontcap():
fc = os.getenv('GRASS_FONT_CAP')
if fc and not os.access(fc, os.R_OK):
message(_("Building user fontcap..."))
call(["g.mkfontcap"])
-
+
+
def check_shell():
global sh, shellname, grass_env_file
# cygwin has many problems with the shell setup
@@ -779,15 +831,15 @@
sh = os.path.basename(os.getenv('SHELL'))
if windows and sh:
sh = os.path.splitext(sh)[0]
-
+
if sh == "ksh":
shellname = "Korn Shell"
elif sh == "csh":
- shellname = "C Shell"
+ shellname = "C Shell"
elif sh == "tcsh":
- shellname = "TC Shell"
+ shellname = "TC Shell"
elif sh == "bash":
- shellname = "Bash Shell"
+ shellname = "Bash Shell"
elif sh == "sh":
shellname = "Bourne Shell"
elif sh == "zsh":
@@ -796,7 +848,7 @@
shellname = "Command Shell"
else:
shellname = "shell"
-
+
if sh in ['csh', 'tcsh']:
grass_env_file = os.path.join(grass_config_dir, 'cshrc')
elif sh in ['bash', 'msh', 'cygwin', 'sh']:
@@ -807,12 +859,14 @@
grass_env_file = os.path.join(grass_config_dir, 'env.bat')
else:
grass_env_file = os.path.join(grass_config_dir, 'bashrc')
- warning(_("Unsupported shell <%s>: %s") % (sh, grass_env_file))
-
+ warning(_("Unsupported shell <%(sh)s>: %(env)s") % {'sh': sh,
+ 'env': grass_env_file})
+
# check for SHELL
if not os.getenv('SHELL'):
fatal(_("The SHELL variable is not set"))
-
+
+
def check_batch_job():
global batch_job
# hack to process batch jobs:
@@ -834,17 +888,18 @@
bj = Popen(shell, shell=True)
bj.wait()
message(_("Execution of '%s' finished.") % batch_job)
-
+
+
def start_gui():
# Start the chosen GUI but ignore text
if grass_debug:
message(_("GRASS GUI should be <%s>") % grass_gui)
-
+
# Check for gui interface
if grass_gui == "wxpython":
- Popen([os.getenv('GRASS_PYTHON'),
- gfile(wxpython_base, "wxgui.py")])
-
+ Popen([os.getenv('GRASS_PYTHON'), gfile(wxpython_base, "wxgui.py")])
+
+
def clear_screen():
if windows:
pass
@@ -853,7 +908,8 @@
else:
if not os.getenv('GRASS_BATCH_JOB') and not grass_debug:
call(["tput", "clear"])
-
+
+
def show_banner():
sys.stderr.write(r"""
__________ ___ __________ _______________
@@ -868,6 +924,7 @@
def say_hello():
sys.stderr.write(_("Welcome to GRASS %s") % grass_version)
+
def show_info():
sys.stderr.write(
r"""
@@ -889,36 +946,38 @@
message("%-41sexit" % _("When ready to quit enter:"))
message("")
+
def csh_startup():
global exit_val
-
+
userhome = os.getenv('HOME') # save original home
home = location
os.environ['HOME'] = home
-
+
cshrc = os.path.join(home, ".cshrc")
tcshrc = os.path.join(home, ".tcshrc")
try_remove(cshrc)
try_remove(tcshrc)
-
+
f = open(cshrc, 'w')
f.write("set home = %s\n" % userhome)
f.write("set history = 3000 savehist = 3000 noclobber ignoreeof\n")
- f.write("set histfile = %s\n" % os.path.join(os.getenv('HOME'), ".history"))
-
+ f.write("set histfile = %s\n" % os.path.join(os.getenv('HOME'),
+ ".history"))
+
f.write("set prompt = '\\\n")
f.write("Mapset <%s> in Location <%s> \\\n" % (mapset, location_name))
f.write("GRASS %s > '\n" % grass_version)
f.write("set BOGUS=``;unset BOGUS\n")
-
+
path = os.path.join(userhome, ".grass.cshrc") # left for backward compatibility
if os.access(path, os.R_OK):
f.write(readfile(path) + '\n')
if os.access(grass_env_file, os.R_OK):
f.write(readfile(grass_env_file) + '\n')
-
+
mail_re = re.compile(r"^ *set *mail *= *")
-
+
for filename in [".cshrc", ".tcshrc", ".login"]:
path = os.path.join(userhome, filename)
if os.access(path, os.R_OK):
@@ -927,59 +986,62 @@
for l in lines:
if mail_re.match(l):
f.write(l)
-
+
path = os.getenv('PATH').split(':')
f.write("set path = ( %s ) \n" % ' '.join(path))
-
+
f.close()
writefile(tcshrc, readfile(cshrc))
-
+
exit_val = call([gfile("etc", "run"), os.getenv('SHELL')])
-
+
os.environ['HOME'] = userhome
-
+
+
def bash_startup():
global exit_val
-
+
# save command history in mapset dir and remember more
os.environ['HISTFILE'] = os.path.join(location, ".bash_history")
if not os.getenv('HISTSIZE') and not os.getenv('HISTFILESIZE'):
os.environ['HISTSIZE'] = "3000"
-
+
# instead of changing $HOME, start bash with: --rcfile "$LOCATION/.bashrc" ?
# if so, must care be taken to explicity call .grass.bashrc et al for
# non-interactive bash batch jobs?
userhome = os.getenv('HOME') # save original home
home = location # save .bashrc in $LOCATION
os.environ['HOME'] = home
-
+
bashrc = os.path.join(home, ".bashrc")
try_remove(bashrc)
-
+
f = open(bashrc, 'w')
f.write("test -r ~/.alias && . ~/.alias\n")
f.write("PS1='GRASS %s (%s):\w > '\n" % (grass_version, location_name))
- f.write("PROMPT_COMMAND=\"'%s'\"\n" % os.path.join(gisbase, 'etc', 'prompt.py'))
-
+ f.write("PROMPT_COMMAND=\"'%s'\"\n" % os.path.join(gisbase, 'etc',
+ 'prompt.py'))
+
# read environmental variables
path = os.path.join(userhome, ".grass.bashrc") # left for backward compatibility
if os.access(path, os.R_OK):
f.write(readfile(path) + '\n')
if os.access(grass_env_file, os.R_OK):
f.write(readfile(grass_env_file) + '\n')
-
+
f.write("export PATH=\"%s\"\n" % os.getenv('PATH'))
f.write("export HOME=\"%s\"\n" % userhome) # restore user home path
-
+
f.close()
exit_val = call([gfile("etc", "run"), os.getenv('SHELL')])
-
+
os.environ['HOME'] = userhome
+
def default_startup():
global exit_val
-
+
if windows:
os.environ['PS1'] = "GRASS %s> " % (grass_version)
# "$ETC/run" doesn't work at all???
@@ -988,10 +1050,11 @@
else:
os.environ['PS1'] = "GRASS %s (%s):\w > " % (grass_version, location_name)
exit_val = call([gfile("etc", "run"), os.getenv('SHELL')])
-
+
if exit_val != 0:
fatal(_("Failed to start shell '%s'") % os.getenv('SHELL'))
-
+
+
def done_message():
if batch_job and os.access(batch_job, os.X_OK):
message(_("Batch job '%s' (defined in GRASS_BATCH_JOB variable) was executed.") % batch_job)
@@ -1002,27 +1065,30 @@
message("")
message(_("Goodbye from GRASS GIS"))
message("")
-
+
+
def clean_temp():
message(_("Cleaning up temporary files..."))
nul = open(os.devnull, 'w')
- call([gfile("etc", "clean_temp")], stdout = nul, stderr = nul)
+ call([gfile("etc", "clean_temp")], stdout=nul, stderr=nul)
nul.close()
+
def grep(string,list):
expr = re.compile(string)
return [elem for elem in list if expr.match(elem)]
+
def print_params():
plat = gfile(gisbase, 'include', 'Make', 'Platform.make')
fileplat = open(plat)
linesplat = fileplat.readlines()
fileplat.close()
-
+
params = sys.argv[2:]
if not params:
params = ['arch', 'build', 'compiler', 'path', 'revision']
-
+
for arg in params:
if arg == 'path':
sys.stdout.write("%s\n" % gisbase)
@@ -1047,7 +1113,8 @@
sys.stdout.write("%s\n" % val[0].split(':')[1].rstrip('$"\n').strip())
else:
message(_("Parameter <%s> not supported") % arg)
-
+
+
def get_username():
global user
if windows:
@@ -1068,7 +1135,8 @@
pass
if not user:
user = "user_%d" % os.getuid()
-
+
+
def parse_cmdline():
global args, grass_gui, create_new
args = []
@@ -1111,7 +1179,8 @@
# set HOME
if windows and not os.getenv('HOME'):
- os.environ['HOME'] = os.path.join(os.getenv('HOMEDRIVE'), os.getenv('HOMEPATH'))
+ os.environ['HOME'] = os.path.join(os.getenv('HOMEDRIVE'),
+ os.getenv('HOMEPATH'))
# set SHELL
if windows:
@@ -1125,8 +1194,8 @@
# Set default GUI
default_gui = "wxpython"
-# the following is only meant to be an internal variable for debugging this script.
-# use 'g.gisenv set="DEBUG=[0-5]"' to turn GRASS debug mode on properly.
+# the following is only meant to be an internal variable for debugging this
+# script. use 'g.gisenv set="DEBUG=[0-5]"' to turn GRASS debug mode on properly
grass_debug = os.getenv('GRASS_DEBUG')
# Set GRASS version number for R interface etc (must be an env_var for MS-Windows)
@@ -1182,7 +1251,7 @@
if os.getenv('HOSTTYPE') == 'arm':
# small monitor on ARM (iPAQ, zaurus... etc)
os.environ['GRASS_HEIGHT'] = "320"
- os.environ['GRASS_WIDTH'] = "240"
+ os.environ['GRASS_WIDTH'] = "240"
# First time user - GISRC is defined in the GRASS script
if not os.access(gisrc, os.F_OK):
More information about the grass-commit
mailing list