python restart shell_如何在Python(IDLE)[2.7]shell停止运行时恢复/重新加载它?

前面提到的唯一的解决方案是一个脚本,假设您正在调试mymod.py,那么您有以下选项在mymod.py中重新创建状态#my stuff

...

if __name__ == "__main__":

import os, numpy

a = 'blah'

bar = 229

print "debugging environment ready"

用IDLE打开它并运行它(F5),或者用python -i mymod.py在交互模式下打开它

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

^{pr2}$

并在空闲或交互模式下运行此程序

在这两种情况下,都需要在会话中重新创建期望状态,如果需要不同的状态,则将其放入脚本中。在

例如,在空闲时,你得到的第一个================= RESTART: C:\Users\David\Documents\Python Scripts\mymod.py =================

debugging environment ready

>>> a

'blah'

>>> bar

229

>>> os

>>>

第二个呢================ RESTART: C:/Users/David/Documents/Python Scripts/mytest.py ================

debugging environment in outside script ready

>>> a

'blah'

>>> os

>>> bar

229

>>> mymod

>>>更复杂的选择是在shell中执行此操作>>> import mymod

>>> import os, numpy

>>> a = "blah"

>>> bar = 229

假设您在mymod.py公司,例如添加这行new_stuff = 42>>> mymod.new_stuff

Traceback (most recent call last):

File "", line 1, in

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'

如您所见,如果不重新加载mymod,则尝试访问新的_stuff失败,解决方案是重新导入mymod,但这样做只需访问以前加载的版本,因此您需要通过从中删除它来删除它系统模块第一。在

这样做可以保持你的状态,每次你想看到mymod中的变化,你必须执行这个过程。在

但是请注意,您可能会发现这种方法的奇怪行为,例如:假设您在mymod.py公司在class A:

def __init__(self):

self.a = 42

你会发现这个类以前的实例不再被重新处理>>> 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

>>> c

>>>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值