Viktor Rosenfeld <listuse...@googlemail.com> writes: > Hi, > > is there a way to capture stderr output of a babel block and have it > appear in the results block (instead of being printed in the *Shell > Command Output* buffer)? On sh blocks I could redirect myself, but I'm > trying to capture the output of psql (the PostgreSQL client). > > Specifically, I have the following code block: > > #+BEGIN_SRC sql :noweb yes :results output verbatim > \timing on > <<exp8-test-query>> > #+END_SRC > > #+RESULTS: > : count > : 95977 > > The \timing directive causes psql to print the runtime of the query on > stderr. If I run the query on the psql command line, the following > output appears: > > count > ------- > 95977 > (1 row) > > Time: 1895,558 ms > > I suppose that duplicating this output in Babel would be difficult, > because it interferes with the parsing of the result set. >
Hi Viktor, Currently the only action Babel takes with STDERR is to display it in a pop-up buffer when code block evaluation fails. It would certainly be possible to add :results header argument to incorporate STDERR into results (and this desire has been expressed previously). Reasonable combination options would likely include (at least) the following. | stderr-only | return stderr instead of stdout | | 2>&1 | interleave stderr and stdout | | concat | add stderr to the end of stdout | | list | return a list of stderr and stdotu | The best (read simple and extensible) implementation and syntax for this behavior is not obvious to me (and I simply don't have time). If you (or anyone on the list) have any interest in hacking elisp code the place to start would be `org-babel-eval' for a serious implementation, or an quick hack may be possible through customization of the `org-babel-eval-error-notify' function. Hope this helps. Best, > > Cheers, > Viktor > -- Eric Schulte http://cs.unm.edu/~eschulte/