emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
From: John Kitchin <jkitchin@andrew.cmu.edu>
To: emacs-orgmode@gnu.org
Subject: Re: odd/unexpected behavior with Python src blocks
Date: Mon, 29 Sep 2014 14:03:16 -0400	[thread overview]
Message-ID: <m21tqu2tjv.fsf@johns-air.wv.cc.cmu.edu> (raw)
In-Reply-To: <m261g62zft.fsf@johns-air.wv.cc.cmu.edu> (Instructor account's message of "Mon, 29 Sep 2014 11:56:06 -0400")


In case anyone else is interested, here is a workaround of sorts to
capture stderr in a python block:

https://github.com/jkitchin/pycse/blob/master/pycse/sandbox.py

You use this module to redefine stdout and stderr. You basically run
python like this:

#+BEGIN_SRC emacs-lisp
(setq org-babel-python-command "python -m pycse.sandbox")
#+END_SRC

Then you get this output.

#+BEGIN_SRC python :results output
from scipy.integrate import odeint

#k = -1

def f(y, x):
    return -k * y

print(odeint(f, 1, [0, 1]))
#+END_SRC

#+RESULTS:
#+begin_example
sandbox:
---stdout-----------------------------------------------------------
[[ 1.]
 [ 1.]]

---stderr-----------------------------------------------------------
Traceback (most recent call last):
  File "<string>", line 6, in f
NameError: global name 'k' is not defined
Traceback (most recent call last):
  File "<string>", line 6, in f
NameError: global name 'k' is not defined
Traceback (most recent call last):
  File "<string>", line 6, in f
NameError: global name 'k' is not defined
Traceback (most recent call last):
  File "<string>", line 6, in f
NameError: global name 'k' is not defined


#+end_example

At least until babel captures stderr, this is a way to capture it. It does break the nice behavior of making tables output, since it
prints a string. The string could be orgified somewhat, eg

#+STDOUT:


#+STDERR:

I am not sure I will use this routinely, so I am not sure how much I
will put into furhter development.

Instructor account <jkitchin@andrew.cmu.edu> writes:

> Indeed, this passes by org-babel because stderr is not captured, and
> scipy does what you suggest. I guess this happens inside compiled
> c/Fortran code since there is nothing catching it in the odeint
> python function doing that.
>
> Thanks, I will try to bring it up on the scipy list. 
>
> Aaron Ecay <aaronecay@gmail.com> writes:
>
>> Hi John,
>>
>> 2014ko irailak 28an, John Kitchin-ek idatzi zuen:
>>
>> [...]
>>
>>> I am not sure why this happens, but it seems like incorrect behavior to
>>> me.
>>
>> In the first case, python exits with a non-zero exit code, whereas in
>> the second it exits with a zero code (i.e. successful exit), and prints
>> the matrix-thing [[1.], [1.]] to stdout.  It looks like scipy traps the
>> NameErrors and prints them to stderr, but continues its computation
>> regardless.
>>
>> I’d say babel is performing as desired here, but scipy sadly isn’t
>> reporting its errors in the standard way (by a nonzero exit, which I
>> think would happen automatically if the NameErrors made it to the top
>> level of the stack without being caught).

-- 
-----------------------------------
John Kitchin
Professor
Doherty Hall A207F
Department of Chemical Engineering
Carnegie Mellon University
Pittsburgh, PA 15213
412-268-7803
http://kitchingroup.cheme.cmu.edu

      reply	other threads:[~2014-09-29 18:03 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-09-28 22:11 odd/unexpected behavior with Python src blocks John Kitchin
2014-09-29  1:27 ` Aaron Ecay
2014-09-29 15:56   ` Instructor account
2014-09-29 18:03     ` John Kitchin [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.orgmode.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=m21tqu2tjv.fsf@johns-air.wv.cc.cmu.edu \
    --to=jkitchin@andrew.cmu.edu \
    --cc=emacs-orgmode@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).