Mercurial > python-cmd2
diff cmd2.py @ 282:7c6eb0fc75ef
added debug stack trace printing
author | catherine@DellZilla |
---|---|
date | Wed, 07 Oct 2009 14:24:14 -0400 |
parents | 38198b11f48c |
children | bff1f19275e7 |
line wrap: on
line diff
--- a/cmd2.py Wed Oct 07 13:33:58 2009 -0400 +++ b/cmd2.py Wed Oct 07 14:24:14 2009 -0400 @@ -23,7 +23,7 @@ mercurial repository at http://www.assembla.com/wiki/show/python-cmd2 """ import cmd, re, os, sys, optparse, subprocess, tempfile, pyparsing, doctest -import unittest, string, datetime, urllib, glob +import unittest, string, datetime, urllib, glob, traceback from code import InteractiveConsole, InteractiveInterpreter, softspace from optparse import make_option __version__ = '0.5.6' @@ -274,7 +274,8 @@ reserved_words = [] feedback_to_output = False quiet = False - settable = ['prompt', 'continuation_prompt', 'default_file_name', 'editor', + debug = False + settable = ['prompt', 'continuation_prompt', 'debug', 'default_file_name', 'editor', 'case_insensitive', 'feedback_to_output', 'quiet', 'echo', 'timing', 'abbrev'] settable.sort() @@ -284,6 +285,8 @@ if msg[-1] != '\n': self.stdout.write('\n') def perror(self, errmsg, statement=None): + if self.debug: + traceback.print_exc() print str(errmsg) def pfeedback(self, msg): """For printing nonessential feedback. Can be silenced with `quiet`. @@ -650,7 +653,7 @@ mode = 'a' try: self.stdout = open(os.path.expanduser(statement.parsed.outputTo), mode) - except OSError, e: + except Exception, e: self.perror(e) return self.postparsing_postcmd(stop=0) else: @@ -709,7 +712,7 @@ if line[-1] == '\n': # this was always true in Cmd line = line[:-1] return line - + def cmdloop(self, intro=None): """Repeatedly issue a prompt, accept input, parse an initial prefix off the received input, and dispatch to action methods, passing them @@ -1098,13 +1101,15 @@ def __init__(self, obj, attribs): self.obj = obj self.attribs = attribs - self.save() + if self.obj: + self.save() def save(self): for attrib in self.attribs: setattr(self, attrib, getattr(self.obj, attrib)) def restore(self): - for attrib in self.attribs: - setattr(self.obj, attrib, getattr(self, attrib)) + if self.obj: + for attrib in self.attribs: + setattr(self.obj, attrib, getattr(self, attrib)) class Borg(object): '''All instances of any Borg subclass will share state.