[IPython-dev] Fwd: [Matplotlib-users] Improved dashing for black and white plots?

Fernando Perez fperez.net at gmail.com
Wed Jul 12 02:17:24 EDT 2006


Hey guys,

in case one of you wants to have a serious go at this idea.  I think
it would be pretty cool, but it's not completely trivial to implement.
 Capturing of stdout of external and extension code requires proper
handling of the underlying file descriptors.  Here's some code Robert
Kern wrote a while ago to do this:


import os
import sys

STDOUT = 1
STDERR = 2

class Redirector:
     def __init__(self, fd=STDOUT):
         self.fd = fd
         self.started = False

     def start(self):
         if not self.started:
             self.oldhandle = os.dup(self.fd)
             self.piper, self.pipew = os.pipe()
             os.dup2(self.pipew, self.fd)
             os.close(self.pipew)

             self.started = True

     def flush(self):
         if self.fd == STDOUT:
             sys.stdout.flush()
         elif self.fd == STDERR:
             sys.stderr.flush()

     def stop(self):
         if self.started:
             self.flush()
             os.dup2(self.oldhandle, self.fd)
             os.close(self.oldhandle)
             f = os.fdopen(self.piper, 'r')
             output = f.read()
             f.close()

             self.started = False
             return output
         else:
             return None

---------- Forwarded message ----------
From: Fernando Perez <fperez.net at gmail.com>
Date: Jul 12, 2006 12:11 AM
Subject: Re: [Matplotlib-users] Improved dashing for black and white plots?
To: John Hunter <jdhunter at ace.bsd.uchicago.edu>
Cc: matplotlib-users <matplotlib-users at lists.sourceforge.net>


On 7/11/06, John Hunter <jdhunter at ace.bsd.uchicago.edu> wrote:

> You don't need any defense -- it's no secret that mpl is
> under-documented.  If you know how to look, the information is usually
> there, but the trick is knowing how to look
>
> In [3]: l, = plot([1,2,3])
>
> In [4]: setp(l)

Ah, thanks for that reminder!  That's useful to know/re-know.

> This reminds me -- of late I've been wishing for a grep-like feature
> in ipython
>
>   In [2]: setp(l) | grep dash
>
> to see just the output of setp that matches "dash".  In your case, you
> would have seen
>
>     dash_capstyle: ['butt' | 'round' | 'projecting']
>     dash_joinstyle: ['miter' | 'round' | 'bevel']
>     dashes: sequence of on/off ink in points
>
> suggesting that you can not only configure the dash style, but the
> dash cap and join style as well :-)
>
> Of course, I could add this functionality to setp but it would be more
> generally useful to have it in ipython.
>
> The use case I had in mind today was in history, when I had a bunch of
> commands I wanted to grep through
>
>   In [1000]: history | grep xxx

Yes, I also have wanted something like this.  The problem is that many
utilities don't return anything, they just print to stdout (setp is
one such tool).  Which means that we'd need to capture all of stdout
and have it available for further processing always, in a non-blocking
way (so typing 'ls' doesn't make you wait forever before printing).
This is really pushing ipython far into the shell territory, albeit in
a manner that would be very useful.  I'll forward this to the
ipython-dev list, to see if Ville and Walter (the brains behind the
fancy ipipe) want to pick this ball up and run with it.  I'm now
pretty much only working with Brian on the new branch.

Incidentally, this would bring ipython much closer to Microsoft's
Monad shell model:

    http://arstechnica.com/guides/other/msh.ars

Ever since that review came out, I've thought that python/ipython
already has 90% of those tools, save a proper (but better) pipe-like
model for chaining object results.  With a bit of time investment,
this could certainly be done.

Cheers,

f



More information about the IPython-dev mailing list