[IPython-dev] Re: Changes to Notebook Format
Robert Kern
rkern at ucsd.edu
Wed Aug 3 06:52:28 EDT 2005
Hans Meine wrote:
> On Wednesday 03 August 2005 07:13, Robert Kern wrote:
>
>>Any interleaving of stdout and stderr is an accident.
>
> This is an extreme point of view. ;-)
Then allow me to rephrase: "Any specific interleaving of stdout and
stderr is an accident."
>>The whole point of
>>having two different streams is that they can be handled separately and
>>piped to two different locations.
>
> I agree.
>
>>stderr messages need to be written
>>with that in mind for any piece of code.
>
> Right, but..
>
>>Usually, they are, [...]
>
> ..I don't agree 100% here.
>
> And it really *can* be misleading if the "order" is wrong (i.e. not
> chronological) - people are just too used to it from e.g. system shells.
The shells don't do any interleaving. When stdout and stderr are both
output semi-immediately to the same terminal, the outputs get
interleaved somewhat arbitrarily thanks to buffering. In the reasonably
common case where the two streams are piped to different things, no
interleaving takes place at all. It's the latter case that the
separation of stdout and stderr is designed to support. Use of stderr
that doesn't work well with separate destinations is missing the point.
> It's still a feature in my perspective that's not too unimportant and I don't
> see why it "complicates document generation". Just because there is not
> maximally one error, one output cell belonging to one input, but an ordered
> alternating sequence?
Look at the code. It's dead simple (at least this bit) and works. At
minimum, implementing an interleaved stdout and stderr means more work
compared to doing nothing and using the current, working code. As
currently implemented, to get the data, the document generator just
looks up the number of the cell (the "NN" in "In [NN]" and "Out[NN]")
and the type. To change that, you would have to look up the number of
the cell, the type, and some other specifier to pick out the specific
stdout/stderr datum. That extra information needs to be handled every
time there's output, not just the few times that stdout and stderr are
interleaved.
Alternatively, we can give up fine-grained selection of which elements
are shown for a given cell number, but I think that's going to be a
feature used quite often. I often want to suppress the Out or the stdout
elements because they're too long, but keep the In element.
I hate being the killjoy all the time, and I'm not suggesting that this
feature won't be worthwhile to implement eventually but that we have
higher priorities right now. Use of stderr is relatively rare (outside
of tracebacks which we catch by a different mechanism). Use of stderr
that really needs a specific interleaving with stdout (which was never
guaranteed anywhere else) to make sense is even rarer.
--
Robert Kern
rkern at ucsd.edu
"In the fields of hell where the grass grows high
Are the graves of dreams allowed to die."
-- Richard Harter
More information about the IPython-dev
mailing list