[IPython-user] help with embedding
David M. Kaplan
dmk@ucsc....
Fri Jul 11 09:23:38 CDT 2008
Hi
Thanks for the response. I will submit a bug report. I have a few
comments/responses below.
On Fri, 2008-07-11 at 04:01 -0700, Fernando Perez wrote:
> > 2) The restriction to not being able to modify variables is a bit of a
> > pain. In matlab, I often use keyboard to give information to my
> > scripts. Is there a way around this? Or is there another approach I
> > should be using?
>
> There's no way around it, it's a limitation imposed by python itself:
> the locals dict obtained from the stack is read-only.
>
It has been hard for me to figure out how python treats namespaces, but
if I understand correctly, the local namespace is read-only, while the
global is writable. If this is true, I would naively think that the
following would enable you to modify ipython variables:
IPShellEmbed(local_ns=globals(),global_ns=locals())
globals['nameofvar']=100
But this doesn't work at all, probably because I don't completely
understand how locals and globals work. I imagine the answer is that
locals() is always read-only, no matter which namespace IPShellEmbed
tries to attach it to.
This relates to one potential solution I found for having a more
"keyboard" like experience (except for being able to modify variables),
that also didn't work:
def keyboard():
IPShellEmbed(['-prompt_in1','Keyboard <\#> '])(local_ns=caller_locals,global_ns=caller_globals)
This would allow me to call keyboard and get a look at the namespaces of
the script or ipython that called keyboard, but I can't figure out how
to get "caller_locals" and "caller_globals". Perhaps someone can give
me a hint....
> Personally, I do use the embedded shell a lot, but when I do so I call
> it in standalone scripts. For quick and dirty inspection of the
> internal state of a script, I often just put
>
> 1/0
>
> and call %debug afterwards. This is post-mortem only, but often tells
> me what I need to know.
>
This is a reasonable solution that should provide much of what I need.
But often times I like to repeatedly stop a script and see how things
are going. In this case, generating an exception isn't what I want.
But IPShellEmbed should work in these cases, except for being able to
change things on the fly.
One other thing I have found - using IPShellEmbed freezes any pylab plot
windows that are open. As often times I use this to look at those plots
before proceeding, this seems like a show stopper. Is there a way to
stop the execution of the script without impeding plot window
functionality?
Thanks again,
David
--
**********************************
David M. Kaplan
Assistant Researcher
UCSC / Institute of Marine Sciences
Ocean Sciences
1156 High St.
SC, CA 95064
Phone: 831-459-4789
Fax: 831-459-4882
http://pmc.ucsc.edu/~dmk/
**********************************
More information about the IPython-user
mailing list