[IPython-dev] Re: Changes to Notebook Format

Fernando Perez Fernando.Perez at colorado.edu
Mon Aug 1 15:41:12 EDT 2005


Hans Meine wrote:
> On Wednesday 27 July 2005 07:44, Fernando Perez wrote:
>>>As for having stdout cells interleaved with other types of output cells,
>>>I think that's going to be pretty hard. You'd have to collect the output
>>>from each statement separately. I'm of the opinion that you should just
>>>collect one each of stdout and stderr.
>>
>>Yup.
> 
> 
> I disagree.  In my opinion, I want to preserve the order of interleaving 
> stdout/stderr outputs.  E.g.
> 
>   for i in range(10):
>      myFunc(filenames[i])
> 
> Now let myFunc output either "File processed fine." to stdout or "Error 
> processing file" to stderr.  (Admitted, the messages suck. ;-) )
> 
> I would like to know exactly which i's failed.

Oh, I don't disagree with you that it would be _nice_ to have that 
interleaving.  The problem is _how_ to do it.  On the implementation end of 
things (where desires have to become reality), you have an object which can 
track each of the output streams (stdout/err), and that's about it.  Those 
animals are buffered to begin with, so knowing in a reliable way when data 
came into each is not really possible, I think even for a plain shell.

I seem to recall that even at the shell, quite often stdout and stderr come 
out in seemingly random interleaving order, depending on the (in practice 
random) details of buffer fill times.

So I'm not really sure how this could be done in general.  One possible 
conveninence feature we could add would be auto-timestamping.  Since we have 
to trap stdout and reroute it to the gui, we could offer the possibility of 
prepending each write() call with a timestamp.  This would be off by default, 
of course, but it could be useful in many circumstances.

If I'm missing some obvious solution to the interleaving problem, feel free to 
point it out.

Cheers,

f




More information about the IPython-dev mailing list