[Python-Dev] distutils & stderr

M.-A. Lemburg mal@lemburg.com
Fri, 01 Feb 2002 12:58:33 +0100


Michael Hudson wrote:
> 
> Greg Ward <gward@python.net> writes:
> 
> > On 31 January 2002, Jeremy Hylton said:
> > > I started a thread on similar issues on the distutils-sig mailing list
> > > a week or two ago.  There's agreement that output is a problem.
> >
> > The amount of output, or the binary nature of control (total silence
> > vs. total verbosity)?  I knew that was a minor problem when I wrote that
> > code initially, but had bigger fish to fry.
> 
> I'm thinking that verbose should range from about -2 (no output at
> all, even from commands if we can supress it) to about 2 (stupid
> amounts of output) with the default being 0, where we take our guide
> from what make outputs by default.
> 
> -v and -q would then be additive on the command line, so
> 
> python setup.py -q -v -v -q -q
> 
> would be an odd way of specifying "verbose==-1".

That looks like line noise :-)
 
> > FWIW, my current thinking is that code that wants to be chatty should do
> > something like this:
> >
> >   log(1, "installing foo.bar package")
> >   ...
> >   log(2, "copying foo/bar/baz.py to /usr/local/lib/python2.1/site-packages/foo/bar")
> >
> > The first number is the logging threshold, compared against a global
> > verbosity level.
> 
> This sounds good.

Hmm, that's very close to what I have implemented in mx.Log
(see the egenix-mx-base package). 
 
> > In a strongly OO system like the Distutils, that should probably be
> > spelled
> >
> >   log(N, msg)
> >
> > where the logging threshold is carried around in each object (or in some
> > global object).
> >
> > This shouldn't be too hard to bolt onto the existing code -- ISTR that
> > the verbose flag is readily available to every object in the system;
> > just change it from a boolean to an integer and ensure that every log
> > message goes through self.log().
> >
> > Oh wait: most of the low-level worker code in the Distutils falls
> > outside the main class hierarchy, so the verbose flag isn't *quite* so
> > readily available; it gets passed in to a heck of a lot of functions.
> > Crap.
> 
> There are a lot of calls in disutils that go
> 
>     func(...,...,verbose=self.verbose, dry_run=self.dry_run);
> 
> Would it really be so bad to have a global "verbose" variable in, say,
> core?  (same for dry_run, too).
> 
> Of course, what I would like is CL-style special variables, but ne'er
> mind that...

FYI, I usually use a package/module scope global logging object
for this kind of thing (rather than a function which then looks
somewhere for the debug level). Works great.

-- 
Marc-Andre Lemburg
CEO eGenix.com Software GmbH
______________________________________________________________________
Company & Consulting:                           http://www.egenix.com/
Python Software:                   http://www.egenix.com/files/python/