[IPython-dev] Embedded shell setup
Frédéric Mantegazza
mantegazza at ill.fr
Tue Dec 1 02:29:45 EST 2015
Hi!
In 2003, we started to develop an application to drive a big instrument
(a neutron spectrometer), in a french research institute. Since 2004, this
application runs 24h a day, almost all days.
It is entirely written in python, and is heavily based on Pyro for
clients/servers communication, and, of course IPython, for user
interaction.
With these 2 great pieces of code, we have build a very strong tool.
Fernando helped us a lot to customize IPython, and integrate it in our
code. Thanks again for all your help, Fernando!
Even if our app. evolved during all these years, it is still based on
softwares versions of the early 2k (debian lenny, IPython 0.7.2, Pyro
3.7) :o/
It is time to do a major upgrade! That's why we need some help...
Here is what we are doing when we instanciate what we call the
'console' (client part of our app.); we already adapted it to IPython 2.3,
but there are still things which does not work (loading 'pymad' profile),
and surely thing which could be better (hooks, custom completer...).
We would really appreciate feedback!
Thanks,
----------------------------------------------------------------
config = IPython.config.loader.Config()
promptManager = config.PromptManager
promptManager.in_template = "{color.LightRed}PyMAD>>> "
promptManager.out_template = ' '
# profile is not loaded does not work!
config.profile = "pymad"
startMsg = "\nWelcome to PyMAD"
startMsg += "\n\nAvailable objects: %s " % sortedProxies
startMsg += "\n\nAvailable helpers: %s\n" % helpers.keys()
exitMsg = "\nBye!\n"
# Instanciate embedded ipython instance
ipshell = InteractiveShellEmbed(config,
banner1=startMsg,
exit_msg=exitMsg)
ipshell.set_custom_exc((Exception, ), pymadHandler)
ipshell.set_custom_completer(proxy_matches)
ipshell.set_custom_completer(python_function_parameters)
# Is there a better way to customize Completer?
ipshell.Completer._default_arguments = \
new.instancemethod(_default_arguments,
ipshell.Completer,
ipshell.Completer.__class__)
ipshell.Completer.merge_completions = False
# Is there a better way to customize prefilter?
ipshell.prefilter = new.instancemethod(_prefilter_del,
ipshell,
ipshell.__class__)
ipshell.set_hook("pre_run_code_hook", _pre_run_code_hook)
ipshell.set_hook("pre_prompt_hook", _pre_prompt_hook)
#ipshell.set_hook("shutdown_hook", _shutdown_hook) # use atexit module
--
Frédéric MANTEGAZZA CEA-Grenoble
Tel. : 33 (0) 476 207 617 INAC/SPSMS/MDN
Fax : 33 (0) 476 483 906 17, rue des Martyrs
Courriel : mantegazza at ill.fr F-38054 Grenoble Cedex 09
More information about the IPython-dev
mailing list