cool! this worked wonderfully: (setq org-babel-python-command "python -m sandbox") #+BEGIN_SRC python print 'hello' print 4 + 6 import sys print >>sys.stderr, 'message to stderr' raise Exception('baboom') #+END_SRC #+RESULTS: #+begin_example -------------------------------------------------------------- hello 10 -------------------------------------------------------------- stderr: message to stderr -------------------------------------------------------------- Traceback (most recent call last): File "/home/jkitchin/Dropbox/pycse/pycse/sandbox/sandbox.py", line 19, in exec(content, ns_globals, ns_locals) File "", line 10, in Exception: baboom #+end_example If anyone is interested, here is the sandbox module: #!/usr/bin/env python from cStringIO import StringIO import os, sys old_stdout = sys.stdout old_stderr = sys.stderr redirected_output = sys.stdout = StringIO() redirected_error = sys.stderr = StringIO() ns_globals = {} ns_locals = {} if __name__ == '__main__': content = sys.stdin.read() out, err, exc = None, None, None try: exec(content, ns_globals, ns_locals) except: import traceback exc = traceback.format_exc() out = redirected_output.getvalue() err = redirected_error.getvalue() sys.stdout = old_stdout sys.stderr = old_stderr s = ''' -------------------------------------------------------------- {0} '''.format(out) if err: s += ''' -------------------------------------------------------------- stderr: {0} '''.format(err) if exc: s += ''' -------------------------------------------------------------- {0} '''.format(exc) print s John ----------------------------------- John Kitchin Associate Professor Doherty Hall A207F Department of Chemical Engineering Carnegie Mellon University Pittsburgh, PA 15213 412-268-7803 http://kitchingroup.cheme.cmu.edu On Wed, Sep 11, 2013 at 2:17 PM, Eric Schulte wrote: > You could try setting org-babel-python-command to "python -m sandbox". > > If that doesn't work we could add a cmdline header argument to python > code blocks pretty easily. > > Cheers, > > John Kitchin writes: > > > Hi, > > I am looking at a new strategy to capture stderr and exceptions in python > > code blocks. Right now exceptions are not captured in the output, and > > neither is stderr. > > > > I made a little sandbox module that captures stdout, stderr, and > exceptions > > and then prints them all to stdout with some minor formatting. Here is an > > example. > > > > Say test.py has this content > > > > #+BEGIN_SRC python > > print 'hello' > > > > print 4 + 6 > > > > import sys > > > > print >>sys.stderr, 'message to stderr' > > > > > > raise Exception('baboom') > > #+END_SRC > > > > When I use the sandbox, I get all the output on stdout like this. > > > > #+BEGIN_SRC sh > > python -m sandbox < test.py > > # or cat test.py | python -m sandbox > > #+END_SRC > > > > #+RESULTS: > > #+begin_example > > > > -------------------------------------------------------------- > > hello > > 10 > > > > > > -------------------------------------------------------------- > > stderr: > > message to stderr > > > > > > -------------------------------------------------------------- > > Traceback (most recent call last): > > File "/home/jkitchin/Dropbox/pycse/pycse/sandbox/sandbox.py", line 16, > in > > > > exec(content, ns_globals, ns_locals) > > File "", line 10, in > > Exception: baboom > > > > > > #+end_example > > > > > > So, I was wondering how to get this to happen in org-mode on a regular > > python block. I think it could work if I could define a custom > interpreter > > for a particular block, e.g. python-sandbox that takes the codeblock on > > stdin. > > > > Is there some other way that I could do this? Thanks! > > > > John > > > > ----------------------------------- > > John Kitchin > > Associate Professor > > Doherty Hall A207F > > Department of Chemical Engineering > > Carnegie Mellon University > > Pittsburgh, PA 15213 > > 412-268-7803 > > http://kitchingroup.cheme.cmu.edu > > -- > Eric Schulte > https://cs.unm.edu/~eschulte > PGP: 0x614CA05D >