* setting options to python interpreter for a code block @ 2013-09-11 17:22 John Kitchin 2013-09-11 18:17 ` Eric Schulte 0 siblings, 1 reply; 3+ messages in thread From: John Kitchin @ 2013-09-11 17:22 UTC (permalink / raw) To: emacs-orgmode [-- Attachment #1: Type: text/plain, Size: 1652 bytes --] 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 <module> exec(content, ns_globals, ns_locals) File "<string>", line 10, in <module> 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 [-- Attachment #2: Type: text/html, Size: 2232 bytes --] ^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: setting options to python interpreter for a code block 2013-09-11 17:22 setting options to python interpreter for a code block John Kitchin @ 2013-09-11 18:17 ` Eric Schulte 2013-09-11 18:25 ` John Kitchin 0 siblings, 1 reply; 3+ messages in thread From: Eric Schulte @ 2013-09-11 18:17 UTC (permalink / raw) To: John Kitchin; +Cc: emacs-orgmode 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 <jkitchin@andrew.cmu.edu> 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 > <module> > exec(content, ns_globals, ns_locals) > File "<string>", line 10, in <module> > 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 ^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: setting options to python interpreter for a code block 2013-09-11 18:17 ` Eric Schulte @ 2013-09-11 18:25 ` John Kitchin 0 siblings, 0 replies; 3+ messages in thread From: John Kitchin @ 2013-09-11 18:25 UTC (permalink / raw) To: Eric Schulte; +Cc: emacs-orgmode [-- Attachment #1: Type: text/plain, Size: 4328 bytes --] 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 <module> exec(content, ns_globals, ns_locals) File "<string>", line 10, in <module> 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 <schulte.eric@gmail.com>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 <jkitchin@andrew.cmu.edu> 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 > > <module> > > exec(content, ns_globals, ns_locals) > > File "<string>", line 10, in <module> > > 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 > [-- Attachment #2: Type: text/html, Size: 6133 bytes --] ^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2013-09-11 18:25 UTC | newest] Thread overview: 3+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2013-09-11 17:22 setting options to python interpreter for a code block John Kitchin 2013-09-11 18:17 ` Eric Schulte 2013-09-11 18:25 ` John Kitchin
Code repositories for project(s) associated with this external index https://git.savannah.gnu.org/cgit/emacs.git https://git.savannah.gnu.org/cgit/emacs/org-mode.git This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.