如何恢复/重新加载Python(IDLE)[2.7]shell停止的位置?

如何恢复/重新加载Python(IDLE)[2.7]shell停止的位置?,python,python-2.7,shell,python-idle,Python,Python 2.7,Shell,Python Idle,在Python2.7中,我正在调试一个导入的模块,在空闲shell中使用一个扩展的站立环境。我希望自动重新创建该环境(而不是手动逐行键入),以便在每次我检查模块时简化调试(触发shell中的自动重新启动并丢失当前状态)。有没有办法保存shell状态,或者创建一个脚本,以便在已经运行了大量命令的情况下[原样]重新打开shell 这与保存文件或脚本不同——我希望将shell恢复到以前的状态。例如,如果我执行了导入操作系统,numpy,并分配了几个变量a='foo',bar=229,我想将shell恢

在Python2.7中,我正在调试一个导入的模块,在空闲shell中使用一个扩展的站立环境。我希望自动重新创建该环境(而不是手动逐行键入),以便在每次我检查模块时简化调试(触发shell中的自动重新启动并丢失当前状态)。有没有办法保存shell状态,或者创建一个脚本,以便在已经运行了大量命令的情况下[原样]重新打开shell

这与保存文件或脚本不同——我希望将shell恢复到以前的状态。例如,如果我执行了导入操作系统,numpy,并分配了几个变量
a='foo'
bar=229
,我想将shell恢复到已经导入操作系统,numpy,并分配
a
bar
的相同状态

处理注释:打开文件以空闲方式打开文件;不是我想要的。保存脚本可以,但不会恢复shell窗口的状态。

创建脚本(例如test_this.py),并添加您键入的所有行

import os
import numpy
a = 'blah'
bar = 229
完成后,保存并按F5(运行),它将出现在空闲解释器中。如果您有任何错误,它们也会出现,您可以学习调试

(添加为回复而不是注释,因为注释不允许多行脚本)

创建脚本(例如test_this.py),并添加您键入的所有行

import os
import numpy
a = 'blah'
bar = 229
完成后,保存并按F5(运行),它将出现在空闲解释器中。如果您有任何错误,它们也会出现,您可以学习调试


(添加为回复,而不是注释,因为注释不允许多行脚本)

前面提到的显而易见且几乎唯一的解决方案是脚本,假设您正在调试
mymod.py
,那么您有以下选项

  • mymod.py

    #my stuff
    ...
    if __name__ == "__main__": 
        import os, numpy
        a = 'blah'
        bar = 229
        print "debugging environment ready"
    
    import mymod
    import os, numpy
    a = 'blah'
    bar = 229
    print "debugging environment in outside script ready"
    
    用IDLE打开它并运行它(F5),或者用python-i mymod.py以交互模式打开它

  • 制作一个新脚本来测试它,比如说
    mytest.py

    #my stuff
    ...
    if __name__ == "__main__": 
        import os, numpy
        a = 'blah'
        bar = 229
        print "debugging environment ready"
    
    import mymod
    import os, numpy
    a = 'blah'
    bar = 229
    print "debugging environment in outside script ready"
    
    并在空闲或交互模式下运行此命令

  • 在这两种情况下,您都会在会话中重新创建所需状态,如果您想要不同的状态,请将其放入脚本中

    例如,在空闲状态下,使用第一个

    ================= RESTART: C:\Users\David\Documents\Python Scripts\mymod.py =================
    debugging environment ready
    >>> a
    'blah'
    >>> bar
    229
    >>> os
    <module 'os' from 'C:\Python27\lib\os.pyc'>
    >>> 
    
    假设您在mymod.py中修改了一些内容,例如添加此行
    new\u stuff=42

    >>> mymod.new_stuff
    
    Traceback (most recent call last):
      File "<pyshell#14>", line 1, in <module>
        mymod.new_stuff
    AttributeError: 'module' object has no attribute 'new_stuff'
    >>> import sys
    >>> del sys.modules["mymod"]
    >>> import mymod
    >>> mymod.new_stuff
    42
    >>> a
    'blah'
    
    你会发现这个类以前的实例不再被重新处理

    >>> b = mymod.A()
    >>> del sys.modules["mymod"]
    >>> import mymod
    >>> c = mymod.A()
    >>> b.a
    42
    >>> c.a
    42
    >>> isinstance(b,mymod.A)
    False
    >>> isinstance(c,mymod.A)
    True
    >>> b
    <mymod.A instance at 0x02CA62D8>
    >>> c
    <mymod.A instance at 0x02CE5378>  
    >>>      
    
    >b=mymod.A()
    >>>删除系统模块[“mymod”]
    >>>导入mymod
    >>>c=mymod.A()
    >>>文学学士
    42
    >>>c.a
    42
    >>>isinstance(b,mymod.A)
    假的
    >>>isinstance(c,mymod.A)
    真的
    >>>b
    >>>c
    >>>      
    

    前面提到的显而易见且几乎唯一的解决方案是一个脚本,假设您正在调试
    mymod.py
    ,那么您有以下选项

  • mymod.py

    #my stuff
    ...
    if __name__ == "__main__": 
        import os, numpy
        a = 'blah'
        bar = 229
        print "debugging environment ready"
    
    import mymod
    import os, numpy
    a = 'blah'
    bar = 229
    print "debugging environment in outside script ready"
    
    用IDLE打开它并运行它(F5),或者用python-i mymod.py以交互模式打开它

  • 制作一个新脚本来测试它,比如说
    mytest.py

    #my stuff
    ...
    if __name__ == "__main__": 
        import os, numpy
        a = 'blah'
        bar = 229
        print "debugging environment ready"
    
    import mymod
    import os, numpy
    a = 'blah'
    bar = 229
    print "debugging environment in outside script ready"
    
    并在空闲或交互模式下运行此命令

  • 在这两种情况下,您都会在会话中重新创建所需状态,如果您想要不同的状态,请将其放入脚本中

    例如,在空闲状态下,使用第一个

    ================= RESTART: C:\Users\David\Documents\Python Scripts\mymod.py =================
    debugging environment ready
    >>> a
    'blah'
    >>> bar
    229
    >>> os
    <module 'os' from 'C:\Python27\lib\os.pyc'>
    >>> 
    
    假设您在mymod.py中修改了一些内容,例如添加此行
    new\u stuff=42

    >>> mymod.new_stuff
    
    Traceback (most recent call last):
      File "<pyshell#14>", line 1, in <module>
        mymod.new_stuff
    AttributeError: 'module' object has no attribute 'new_stuff'
    >>> import sys
    >>> del sys.modules["mymod"]
    >>> import mymod
    >>> mymod.new_stuff
    42
    >>> a
    'blah'
    
    你会发现这个类以前的实例不再被重新处理

    >>> b = mymod.A()
    >>> del sys.modules["mymod"]
    >>> import mymod
    >>> c = mymod.A()
    >>> b.a
    42
    >>> c.a
    42
    >>> isinstance(b,mymod.A)
    False
    >>> isinstance(c,mymod.A)
    True
    >>> b
    <mymod.A instance at 0x02CA62D8>
    >>> c
    <mymod.A instance at 0x02CE5378>  
    >>>      
    
    >b=mymod.A()
    >>>删除系统模块[“mymod”]
    >>>导入mymod
    >>>c=mymod.A()
    >>>文学学士
    42
    >>>c.a
    42
    >>>isinstance(b,mymod.A)
    假的
    >>>isinstance(c,mymod.A)
    真的
    >>>b
    >>>c
    >>>      
    

    您可以将代码保存在文件中并在IDLEI中打开。如果重复相同的命令,则可以将它们全部添加到脚本中并进行编辑以删除错误。将代码保存在文件中只需在新的空闲窗口中打开即可。我希望代码在空闲shell中执行。我熟悉编辑脚本-这不是我想做的。我们的愿望是将外壳恢复到它原来的状态,并使其保持该状态。我编辑了原始问题以反映这些要点。使用标准解释器,您只需在它完成脚本运行后传递
    -I
    标志即可进入交互模式。我不知道IDLE,但IDLE中可能有类似的东西。保存正在运行的Python进程状态的唯一方法是保存创建当前状态的Python语句。可以保存Shell会话并将其编辑为输入的语句。然后可以从编辑器运行结果以重新创建程序状态。从交互式实验创建程序是一件正常的事情。您可以将代码保存在文件中并在IDLE中打开。如果重复相同的命令,您可以将它们全部添加到脚本中并进行编辑以删除错误。将代码保存在文件中只需在新的空闲窗口中打开即可。我希望代码在空闲shell中执行。我熟悉编辑脚本-这不是我想做的。我们的愿望是将外壳恢复到它原来的状态,并使其保持该状态。我编辑了原始问题以反映这些要点。使用标准解释器,您只需在它完成脚本运行后传递
    -I
    标志即可进入交互模式。我不知道IDLE,但IDLE中可能有类似的东西。保存正在运行的Python进程状态的唯一方法是保存创建当前状态的Python语句。可以保存Shell会话并将其编辑为输入的语句。然后可以从编辑器运行结果以重新创建程序状态。从交互式实验中创建程序是一件正常的事情,但这并不能回答问题。我正在调试一个导入