#!/usr/bin/python
# -*- coding: utf-8 -*-

import sys, inspect


def _traceit(frame, event, arg):

	var_locals = {}
	for i in frame.f_locals:
		if i[0] != "_" and not inspect.ismodule(frame.f_locals[i]): 
			var_locals[i] = frame.f_locals[i]

	var_globals = {}
	for i in frame.f_globals:
		if i[0] != "_" and not inspect.ismodule(frame.f_globals[i]): 
			var_globals[i] = frame.f_globals[i]

	print >> sys.stderr, "###########################################################################"
	print >> sys.stderr, "--- Les variables locales ---"
	print >> sys.stderr, var_locals

	print >> sys.stderr, "--- Les variables globales ---"
	print >> sys.stderr, var_globals

	print >> sys.stderr, "--- Ce qui va ĂȘtre fait  ---"
	if event == "call":
		if frame.f_code.co_name == "<module>":
			print >> sys.stderr,"On entre dans le fichier :", frame.f_code.co_filename
			return _traceit
		args = []
		lvars = []
		for i in frame.f_code.co_varnames:
			if i in var_locals:
				args.append(i)
			else:
				lvars.append(i)
		print >> sys.stderr, "Appel de", frame.f_code.co_name
		print >> sys.stderr, "- Arguments :", args
		print >> sys.stderr, "- Variables locales :", lvars
	elif event == "return":
		if frame.f_code.co_name == "<module>":
			print >> sys.stderr,"On sort du fichier"
			return _traceit
		print >> sys.stderr, "Fin de", frame.f_code.co_name
		print >> sys.stderr, "- Valeur de retour :", arg
	else:
		print >> sys.stderr, "Exécution du code :"
		print >> sys.stderr, "- Fichier :", frame.f_code.co_filename
		print >> sys.stderr, "- Ligne :", frame.f_lineno

	return _traceit

sys.settrace(_traceit)

if len(sys.argv) < 2:
	print "Usage :", sys.argv[0], "<python script>"
else:
	execfile(sys.argv[1])



syntax highlighted by Code2HTML, v. 0.9.1