On Sun, 27 Feb 2011 08:55:10 -0800, Gnarlodious wrote: > Using the doctest module, I get three different outputs: > > 1) From the Terminal shell, I see a full report: > python ~/Sites/Sectrum/Filter.py -v
Can we assume that Filter.py, whatever that is, runs doctest.testmod()? > 2) From the Terminal interactive session, I see an abbreviated report of > only the failures: > from doctest import testmod; testmod(Filter) That's because you haven't specified the verbose option, either by injecting -v into sys.argv, or by verbose=True as an argument to testmod. > 3) From a browser CGI, I see a named tuple: from doctest import testmod; > doctest.testmod() > > This returns output like: > > TestResults(failed=1, attempted=5) > > The browser is invoking the exact same code as the shell doctest, so why > should it return a named tuple? Because testmod *always* returns a named tuple. Read the Fine Manual at the interactive interpreter with: help(testmod) > And how do I get it to return the full > text so I can read it in the browser? You don't. Consider a simplified version: def testmod(): print "lots of stuff" return (failures, total) If you want to capture "lots of stuff", you have to either play nasty tricks with replacing standard out with a StringIO instance, or similar, or you have to look at the implementation of testmod() and re-implement it yourself. Oh, here's a thought, if you're running Python 3, you could monkey-patch doctest: # COMPLETELY UNTESTED!!! from stringio import StringIO from functools import partial buffer = StringIO() myprint = partial(print, file=buffer) doctest.print = myprint doctest.testmod() Now somehow you have to pass buffer.as_string() to your CGI program, in whatever way you would normally do so. -- Steven -- http://mail.python.org/mailman/listinfo/python-list