如何在代码中嵌入IPython shell,并让它自动显示调用它的行号和函数?
我目前有以下设置可以在代码中嵌入IPython shell:
from IPython.frontend.terminal.embed import InteractiveShellEmbed
from IPython.config.loader import Config
# Configure the prompt so that I know I am in a nested (embedded) shell
cfg = Config()
prompt_config = cfg.PromptManager
prompt_config.in_template = 'N.In <\\#>: '
prompt_config.in2_template = ' .\\D.: '
prompt_config.out_template = 'N.Out<\\#>: '
# Messages displayed when I drop into and exit the shell.
banner_msg = ("\n**Nested Interpreter:\n"
"Hit Ctrl-D to exit interpreter and continue program.\n"
"Note that if you use %kill_embedded, you can fully deactivate\n"
"This embedded instance so it will never turn on again")
exit_msg = '**Leaving Nested interpreter'
# Put ipshell() anywhere in your code where you want it to open.
ipshell = InteractiveShellEmbed(config=cfg, banner1=banner_msg, exit_msg=exit_msg)
这允许我只需使用ipshell()
就可以在代码的任何地方启动完整的IPython shell。例如,以下代码:
a = 2
b = a
ipshell()
frameinfo = getframeinfo(currentframe())
print 'Stopped at: ' + frameinfo.filename + ' ' + str(frameinfo.lineno)
您可以从另一个用户定义函数中调用ipshell()
,例如ipsh()
from inspect import currentframe
def ipsh():
frame = currentframe().f_back
msg = 'Stopped at {0.f_code.co_filename} and line {0.f_lineno}'.format(frame)
ipshell(msg,stack_depth=2) # Go back one level!
然后,只要您想放入IPython shell,就使用ipsh()
。
stack_depth=2
在检索新的IPython shell的命名空间时要求ipshell
上升一个级别(默认值为1
)。currentframe().f_back()
检索前一个框架,以便打印调用ipsh()
的位置的行号和文件。从我所读到的内容来看,Python中有两种调试代码的方法: > 使用传统调试器,如或。它支持诸如用于、用于、用于等命令,但是您不能直接访问IPython shell,这对于对象检查非常有用。 通过在代码中嵌入IPython shell来使用IPython。您可以从IPython导入嵌入,然后在代码中使用。当您的程序/脚本命中语句时,您将被放到IPython shell中。这允许使用IPython的
问题内容: 根据我的阅读,有两种方法可以在Python中调试代码: 使用传统的调试器,例如或。它支持诸如for ,for ,for等命令,但是您没有直接访问IPython shell的权限,这对于对象检查非常有用。 使用 IPython的 通过嵌入代码中的一个IPython的壳。您可以这样做,然后在您的代码中使用。当您的程序/脚本命中一条语句时,您将进入IPython shell。这允许使用所有I
当调用为时,可以执行,打开带有文件的默认编辑器。我想使用“两个进程”模型,以便我可以将多个客户端附加到同一个内核。但这似乎不允许打开编辑器。是设计好的吗?有解决方法吗?
我需要在文件中创建一个图形,而不在IPython笔记本中显示它。我不清楚和。但是,当我调用除了保存在。当自动创建大型打印文件集时,这通常是不可取的。或者在需要另一个应用程序进行外部处理的中间文件的情况下。 不确定这是一个还是笔记本问题。
问题内容: 假设我有一个IPython会话,从中调用一些脚本: 有没有一种方法可以引入断点,从中可以从IPython检查工作区? 我记得在以前的IPython版本中可以做到这一点: 但是该子模块似乎不再可用。 假设我已经打开了IPython会话: 如何在我选择的位置停止程序并使用IPython检查我的工作区 ? 通常,我更喜欢不需要我预先指定行号的解决方案,因为我希望上面有多个这样的调用,而不必跟
问题内容: 为什么可以用经node.js测试的JavaScript调用此函数: 为什么最后一次呼叫“” 有效?是node.js中的错误,V8引擎中的错误,正式未定义的行为还是对所有解释程序实际上有效的JavaScript? 问题答案: 似乎是Node REPL错误,将这两行放在会导致语法错误。 错误: 问题已提交#6634。 转载于v0.10.20。 v0.11.7已修复此问题。