Author: duncan
Date: Sat Nov 10 23:44:00 2007
New Revision: 10094
Log:
Added a --debug (-d) option to print the actions
Modified:
branches/rel-1-7/freevo/freevo
branches/rel-1/freevo/freevo
Modified: branches/rel-1-7/freevo/freevo
==============================================================================
--- branches/rel-1-7/freevo/freevo (original)
+++ branches/rel-1-7/freevo/freevo Sat Nov 10 23:44:00 2007
@@ -1,4 +1,5 @@
#!/usr/bin/env python
+# vim:tabstop=4:softtabstop=4:shiftwidth=4:expandtab:filetype=python:
# -*- coding: iso-8859-1 -*-
# -----------------------------------------------------------------------
# freevo - the main entry point to the whole suite of applications
@@ -31,11 +32,28 @@
import os
import sys
+import time
import popen2
from signal import *
+debug = 0
+cmdfile = None
+def _debug_(message, level=1):
+ global debug
+ if debug >= level:
+ print message
+
+
+def _gdb_script_(message):
+ global debug
+ global cmdfile
+ if debug < 2:
+ return
+ print >>cmdfile, message
+
+
def show_help():
"""
show how to use this script
@@ -48,9 +66,9 @@
print '''\
freevo [ script | options]
options:
- -fs start freevo in a new x session in fullscreen
+ -fs start freevo in a new x session in full-screen
-doc create api documentation (for developers)
- -trace activate full trace (usefull for debugging)
+ -trace activate full trace (useful for debugging)
setup run freevo setup to scan your environment
start start freevo as daemon in background
stop stop the current freevo process
@@ -80,6 +98,7 @@
"""
get the newest version of python [ with freevo installed ]
"""
+ _debug_('version=%r' % (sys.version))
if float(sys.version[0:3]) >= 2.3:
# python seems to be ok
search = ('python', 'python2')
@@ -97,6 +116,7 @@
if not check_freevo:
# return if we don't check for an installed version
# of freevo
+ _debug_('python=%r' % (python))
return python
# try to import freevo with this python and get
@@ -114,6 +134,7 @@
if child.childerr:
child.childerr.close()
child.tochild.close()
+ _debug_('python=%r data=%r' % (python, data[:-1]))
return python, data[:-1]
child.wait()
@@ -124,6 +145,7 @@
# nothing found? That's bad!
if check_freevo:
+ _debug_('python=%r data=%r' % (None, None))
return None, None
return None
@@ -132,6 +154,7 @@
"""
get pid of running 'name'
"""
+ _debug_('getpid(name=%r, arg=%r)' % (name, arg))
for fname in ('/var/run/' + name + '-%s.pid' % os.getuid(),
'/tmp/' + name + '-%s.pid' % os.getuid()):
if os.path.isfile(fname):
@@ -140,6 +163,7 @@
pid = int(f.readline()[:-1])
except ValueError:
# file does not contain a number
+ _debug_('fname=%r pid=%r' % (fname, 0))
return fname, 0
f.close()
@@ -152,10 +176,12 @@
f.close()
else:
# process not running
+ _debug_('fname=%r pid=%r' % (fname, 0))
return fname, 0
except (OSError, IOError):
# running, but not freevo (because not mine)
+ _debug_('fname=%r pid=%r' % (fname, 0))
return fname, 0
if '-OO' in proc_arg:
@@ -169,8 +195,11 @@
os.unlink(fname)
except OSError:
pass
+ _debug_('fname=%r pid=%r' % (fname, 0))
return fname, 0
+ _debug_('fname=%r pid=%r' % (fname, pid))
return fname, pid
+ _debug_('fname=%r pid=%r' % (fname, 0))
return fname, 0
@@ -180,25 +209,46 @@
"""
fname, pid = getpid(name, arg)
if not pid:
+ _debug_('cannot kill %r no pid' % (name))
return 0
try:
+ for signal in (SIGINT, SIGTERM, SIGKILL):
+ try:
+ _debug_('trying to kill %r pid=%r with signal=%r' % (name,
pid, signal))
+ os.kill(pid, signal)
+ for i in range(10):
+ if getpid(name, arg)[1] == 0:
+ _debug_('killed %r pid=%r with signal=%r (%r)' %
(name, pid, signal, i))
+ break
+ time.sleep(0.1)
+
+ except OSError, e:
+ _debug_('kill(pid=%r signal=%r): %s' % (pid, signal, e))
+ pass
+ if getpid(name, arg)[1] == 0:
+ return 1
+ return 0
+ finally:
try:
os.unlink(fname)
+ _debug_('%s removed' % (fname))
except OSError, e:
- pass
- os.kill(pid, SIGINT)
- os.kill(pid, SIGTERM)
- return 1
- except OSError, e:
- #print e
- pass
- return 0
+ _debug_('%s NOT removed' % (fname))
def start(name, arg, bg, store=1):
"""
start a process
"""
+ global cmdfile
+ _debug_('start(name=%r, arg=%r, bg=%r, store=%r)' % (name, arg, bg, store))
+ _gdb_script_('cat > /tmp/freevo-gdb << _END_')
+ _gdb_script_('b main')
+ _gdb_script_('r %s' % ' '.join(arg[1:]))
+ _gdb_script_('_END_')
+ _gdb_script_('gdb -x /tmp/freevo-gdb %s' % (arg[0]))
+ if cmdfile: cmdfile.close()
+
pid = os.fork()
if pid:
if store:
@@ -227,6 +277,13 @@
#--------------------------------------------------------------------------------
# Main block
#--------------------------------------------------------------------------------
+while len(sys.argv) > 1 and sys.argv[1] in ('--debug', '-d'):
+ debug += 1
+ sys.argv.pop(1)
+if debug >= 2:
+ cmdfile = open('/tmp/freevo-gdb.sh', 'w')
+ print >>cmdfile,'#!/bin/bash'
+
freevo_script = os.path.abspath(sys.argv[0])
if os.path.islink(freevo_script):
freevo_script = os.readlink(freevo_script)
@@ -293,22 +350,31 @@
for var in ('freevo_script', 'runapp', 'freevo_python', 'freevo_locale',
'freevo_share', 'freevo_contrib', 'freevo_config',
'freevo_helpers'):
os.environ[var.upper()] = eval(var)
+ _debug_('%s=%r' % (var.upper(), os.environ[var.upper()]))
+ _gdb_script_('export %s=%s' % (var.upper(), os.environ[var.upper()]))
# extend PYTHONPATH to freevo
if os.environ.has_key('PYTHONPATH'):
os.environ['PYTHONPATH'] = '%s:%s' % (freevo_python,
os.environ['PYTHONPATH'])
else:
os.environ['PYTHONPATH'] = freevo_python
+_debug_('%s=%r' % ('PYTHONPATH', os.environ['PYTHONPATH']))
+_gdb_script_('export %s=%s' % ('PYTHONPATH', os.environ['PYTHONPATH']))
+
# extend PATH to make sure the basics are there
os.environ['PATH'] = '%s:/usr/bin:/bin:/usr/local/bin:' % os.environ['PATH'] +
\
'/usr/X11R6/bin/:/sbin:/usr/sbin'
+_debug_('%s=%r' % ('PATH', os.environ['PATH']))
+_gdb_script_('export %s=%s' % ('PATH', os.environ['PATH']))
# set basic env variables
if not os.environ.has_key('HOME') or not os.environ['HOME']:
os.environ['HOME'] = '/root'
if not os.environ.has_key('USER') or not os.environ['USER']:
os.environ['USER'] = 'root'
+_debug_('%s=%r' % ('USER', os.environ['USER']))
+_debug_('%s=%r' % ('HOME', os.environ['HOME']))
# now check what and how we should start freevo
bg = 0 # start in background
@@ -321,7 +387,7 @@
else:
arg = ''
-# check the arg
+# check the args
if arg in ('--help', '-h'):
# show help
show_help()
Modified: branches/rel-1/freevo/freevo
==============================================================================
--- branches/rel-1/freevo/freevo (original)
+++ branches/rel-1/freevo/freevo Sat Nov 10 23:44:00 2007
@@ -1,4 +1,5 @@
#!/usr/bin/env python
+# vim:tabstop=4:softtabstop=4:shiftwidth=4:expandtab:filetype=python:
# -*- coding: iso-8859-1 -*-
# -----------------------------------------------------------------------
# freevo - the main entry point to the whole suite of applications
@@ -31,11 +32,28 @@
import os
import sys
+import time
import popen2
from signal import *
+debug = 0
+cmdfile = None
+def _debug_(message, level=1):
+ global debug
+ if debug >= level:
+ print message
+
+
+def _gdb_script_(message):
+ global debug
+ global cmdfile
+ if debug < 2:
+ return
+ print >>cmdfile, message
+
+
def show_help():
"""
show how to use this script
@@ -48,9 +66,9 @@
print '''\
freevo [ script | options]
options:
- -fs start freevo in a new x session in fullscreen
+ -fs start freevo in a new x session in full-screen
-doc create api documentation (for developers)
- -trace activate full trace (usefull for debugging)
+ -trace activate full trace (useful for debugging)
setup run freevo setup to scan your environment
start start freevo as daemon in background
stop stop the current freevo process
@@ -80,6 +98,7 @@
"""
get the newest version of python [ with freevo installed ]
"""
+ _debug_('version=%r' % (sys.version))
if float(sys.version[0:3]) >= 2.3:
# python seems to be ok
search = ('python', 'python2')
@@ -97,6 +116,7 @@
if not check_freevo:
# return if we don't check for an installed version
# of freevo
+ _debug_('python=%r' % (python))
return python
# try to import freevo with this python and get
@@ -114,6 +134,7 @@
if child.childerr:
child.childerr.close()
child.tochild.close()
+ _debug_('python=%r data=%r' % (python, data[:-1]))
return python, data[:-1]
child.wait()
@@ -124,6 +145,7 @@
# nothing found? That's bad!
if check_freevo:
+ _debug_('python=%r data=%r' % (None, None))
return None, None
return None
@@ -132,6 +154,7 @@
"""
get pid of running 'name'
"""
+ _debug_('getpid(name=%r, arg=%r)' % (name, arg))
for fname in ('/var/run/' + name + '-%s.pid' % os.getuid(),
'/tmp/' + name + '-%s.pid' % os.getuid()):
if os.path.isfile(fname):
@@ -140,6 +163,7 @@
pid = int(f.readline()[:-1])
except ValueError:
# file does not contain a number
+ _debug_('fname=%r pid=%r' % (fname, 0))
return fname, 0
f.close()
@@ -152,10 +176,12 @@
f.close()
else:
# process not running
+ _debug_('fname=%r pid=%r' % (fname, 0))
return fname, 0
except (OSError, IOError):
# running, but not freevo (because not mine)
+ _debug_('fname=%r pid=%r' % (fname, 0))
return fname, 0
if '-OO' in proc_arg:
@@ -169,8 +195,11 @@
os.unlink(fname)
except OSError:
pass
+ _debug_('fname=%r pid=%r' % (fname, 0))
return fname, 0
+ _debug_('fname=%r pid=%r' % (fname, pid))
return fname, pid
+ _debug_('fname=%r pid=%r' % (fname, 0))
return fname, 0
@@ -180,25 +209,46 @@
"""
fname, pid = getpid(name, arg)
if not pid:
+ _debug_('cannot kill %r no pid' % (name))
return 0
try:
+ for signal in (SIGINT, SIGTERM, SIGKILL):
+ try:
+ _debug_('trying to kill %r pid=%r with signal=%r' % (name,
pid, signal))
+ os.kill(pid, signal)
+ for i in range(10):
+ if getpid(name, arg)[1] == 0:
+ _debug_('killed %r pid=%r with signal=%r (%r)' %
(name, pid, signal, i))
+ break
+ time.sleep(0.1)
+
+ except OSError, e:
+ _debug_('kill(pid=%r signal=%r): %s' % (pid, signal, e))
+ pass
+ if getpid(name, arg)[1] == 0:
+ return 1
+ return 0
+ finally:
try:
os.unlink(fname)
+ _debug_('%s removed' % (fname))
except OSError, e:
- pass
- os.kill(pid, SIGINT)
- os.kill(pid, SIGTERM)
- return 1
- except OSError, e:
- #print e
- pass
- return 0
+ _debug_('%s NOT removed' % (fname))
def start(name, arg, bg, store=1):
"""
start a process
"""
+ global cmdfile
+ _debug_('start(name=%r, arg=%r, bg=%r, store=%r)' % (name, arg, bg, store))
+ _gdb_script_('cat > /tmp/freevo-gdb << _END_')
+ _gdb_script_('b main')
+ _gdb_script_('r %s' % ' '.join(arg[1:]))
+ _gdb_script_('_END_')
+ _gdb_script_('gdb -x /tmp/freevo-gdb %s' % (arg[0]))
+ if cmdfile: cmdfile.close()
+
pid = os.fork()
if pid:
if store:
@@ -227,6 +277,13 @@
#--------------------------------------------------------------------------------
# Main block
#--------------------------------------------------------------------------------
+while len(sys.argv) > 1 and sys.argv[1] in ('--debug', '-d'):
+ debug += 1
+ sys.argv.pop(1)
+if debug >= 2:
+ cmdfile = open('/tmp/freevo-gdb.sh', 'w')
+ print >>cmdfile,'#!/bin/bash'
+
freevo_script = os.path.abspath(sys.argv[0])
if os.path.islink(freevo_script):
freevo_script = os.readlink(freevo_script)
@@ -293,22 +350,31 @@
for var in ('freevo_script', 'runapp', 'freevo_python', 'freevo_locale',
'freevo_share', 'freevo_contrib', 'freevo_config',
'freevo_helpers'):
os.environ[var.upper()] = eval(var)
+ _debug_('%s=%r' % (var.upper(), os.environ[var.upper()]))
+ _gdb_script_('export %s=%s' % (var.upper(), os.environ[var.upper()]))
# extend PYTHONPATH to freevo
if os.environ.has_key('PYTHONPATH'):
os.environ['PYTHONPATH'] = '%s:%s' % (freevo_python,
os.environ['PYTHONPATH'])
else:
os.environ['PYTHONPATH'] = freevo_python
+_debug_('%s=%r' % ('PYTHONPATH', os.environ['PYTHONPATH']))
+_gdb_script_('export %s=%s' % ('PYTHONPATH', os.environ['PYTHONPATH']))
+
# extend PATH to make sure the basics are there
os.environ['PATH'] = '%s:/usr/bin:/bin:/usr/local/bin:' % os.environ['PATH'] +
\
'/usr/X11R6/bin/:/sbin:/usr/sbin'
+_debug_('%s=%r' % ('PATH', os.environ['PATH']))
+_gdb_script_('export %s=%s' % ('PATH', os.environ['PATH']))
# set basic env variables
if not os.environ.has_key('HOME') or not os.environ['HOME']:
os.environ['HOME'] = '/root'
if not os.environ.has_key('USER') or not os.environ['USER']:
os.environ['USER'] = 'root'
+_debug_('%s=%r' % ('USER', os.environ['USER']))
+_debug_('%s=%r' % ('HOME', os.environ['HOME']))
# now check what and how we should start freevo
bg = 0 # start in background
@@ -321,7 +387,7 @@
else:
arg = ''
-# check the arg
+# check the args
if arg in ('--help', '-h'):
# show help
show_help()
-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems? Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >> http://get.splunk.com/
_______________________________________________
Freevo-cvslog mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/freevo-cvslog