如何重置IPython输入提示编号? (控制台,不是笔记本或qt)

时间:2014-08-07 08:06:53

标签: ipython

以下是我当前的IPython命令提示符(常规终端IPython,而不是笔记本或Qt):

In [45]: 

我已经完成了我的工作流程,并且正在进行一项新任务。我想要一种重置IPython输入提示号的方法,如下所示:

In [1]:

我理解这可能来自非重复的问题,我无法回答,也不能回答我的案例:How do I reset the IPython input prompt numbering?

为了进一步说明,我所追求的命令的一个例子是:

In [99]: %reset_command_number
In [1]: 2+2
Out[1]: 4
In [2]: %reset_command_number
In [1]:

3个魔术问题

  1. 这样的魔法(%reset_command_number)是否存在?
  2. 如果对1的答案是肯定的,它会是什么黑魔法?
  3. 如果1的答案为否,是否可以从较低级别的IPython api实现? (是的,我已经搜索了api文档而且我没有找到办法去做,但是......)

3 个答案:

答案 0 :(得分:2)

我不确定你能做什么,而且笔记本电脑的功能是相同的(根据我的理解)只是打开一个新的python会话就好像你打开一个新的标签并再次启动ipython一样执行一切。

所以,如果我是你并且必须开始一项新任务并且想要从In [1]开始,我就会开始一个新的ipython环境。

与ipython笔记本等效的启动新任务将是启动一个新的笔记本。

我能想象你为什么会这样做的唯一原因是你想要从前一个任务中访问一些变量。 我想要使​​用pickle保存您想要重用的对象,或者将变量保存到文件中,并在新的ipython会话中重新加载它。

您是否在Input caching system查看了文档?您可能已经回答了与您相关的其他问题。

请注意,我知道这不是一个真正的答案,但它不仅仅是一个评论,无论如何,我希望这会有所帮助!

如果您有更多特定需求,而不仅仅是重置提示号码,请详细说明。

答案 1 :(得分:2)

一种可能性是修改InteractiveShell中的execution_count

import IPython; IPython.get_ipython().execution_count = 0
  • ;中使用单行命令可以更轻松地重复调用此命令(如果您使用向上箭头滚动命令历史记录)
  • 这具有副作用,在执行第一个命令后,您还将看到此错误。 我不知道它是否有副作用。 (它已经说过历史记录已移至另一个会话)
ERROR! Session/line number was not unique in database. History logging moved to new session 20741

演示

In [1]: a = 1

In [2]: b = 88

In [3]: c = 99

In [4]: import IPython; IPython.get_ipython().execution_count = 0

In [1]: a
Out[1]: 1

ERROR! Session/line number was not unique in database. History logging moved to new session 20767
In [2]: b
Out[2]: 88

In [3]: c
Out[3]: 99

In [4]: import IPython; IPython.get_ipython().execution_count = 0

In [1]: a = 15

ERROR! Session/line number was not unique in database. History logging moved to new session 20768
In [2]: a
Out[2]: 15

In [3]: b
Out[3]: 88

使用别名吗?

也可以为该命令使用别名。例如,创建文件i_reset.py并将其放入site-packages~/.ipython/extensions/PYTHONPATHsys.path

# i_reset.py

def i_reset(line):
    """
    Reset IPython shell numbering to [1]    
    """
    import IPython; IPython.get_ipython().execution_count = 0

def load_ipython_extension(ipython):
    """This function is called when the extension is
    loaded. It accepts an IPython InteractiveShell
    instance. We can register the magic with the
    `register_magic_function` method of the shell
    instance."""
    ipython.register_magic_function(i_reset, 'line')

然后,您可以通过首先加载扩展名然后像这样调用它来使用扩展名:

In [4]: %load_ext i_reset

In [5]: i_reset

In [1]: a
Out[1]: 1

答案 2 :(得分:0)

假设您不需要会话数据,最简单的方法是退出并重新启动 IPython。

$ ipython
In [1]: 1+1
Out[1]: 2

In [2]: 2+2
Out[2]: 4

In [3]: 3+3
Out[3]: 6

In [4]: exit

$ ipython
In [1]: print("Prompt numbering reset")
Prompt numbering reset

In [2]: