Python相当于IDL的stop和.reset

时间:2010-01-24 17:30:25

标签: python reset equivalent idl-programming-language

我对python比较新,但有一点使用IDL的经验。我想知道是否有人知道在python中是否有与IDL的stop和.reset命令相同的命令。

如果我正在运行一些IDL脚本,我写了一个停止命令,基本上它的作用是停止那里的脚本并让我访问脚本中间的命令行。所以我可以访问我在stop命令之前定义的所有函数和变量,我觉得这对调试非常有用。

.reset命令我觉得非常有用。它的作用是重置IDL环境(清除所有变量,函数等)。就好像我关闭了那个会话并打开了一个新会话,但无需退出并重新启动IDL。我发现,如果我正在尝试调试脚本,我写它有时从头开始有用,而不必重置IDL(或现在的python)。在python中,能够取消导入我之前导入的任何模块也很有用。

非常感谢对这些问题的任何帮助。

干杯

相关

8 个答案:

答案 0 :(得分:3)

IPython(除了比标准的python解释器更好的REPL)可以做你想要的:

from IPython.Shell import IPShellEmbed

start_shell = IPShellEmbed()

def times_2(x):
    return 2*x

a = 5

start_shell()

# now in IPython shell
# a -> 5
# times_2(a) -> 10

请注意,您在shell中执行的任何更改都不会在退出时发送回主python进程 - 如果您在IPython中设置= 10(使用上面的示例),则仍然是在主python进程中等于5。

编辑: post on IPython-user mailing list我第一次看到这种技术。

答案 1 :(得分:1)

stop听起来相当于使用code模块。 .reset在Python中没有等同于del的无偿使用。

答案 2 :(得分:1)

使用pdb,就像在这个简短的脚本中一样。在命令行运行它,PDB提示将神奇地出现,允许单步执行,评估任意表达式等。

#!/usr/bin/env  python
import pdb;

print 1
print 2
pdb.set_trace()
print 3
print 4

答案 3 :(得分:1)

您可以在IPython shell中执行%reset

对于停靠点,只需添加pydebug断点,如上所述

答案 4 :(得分:1)

pdb.set_trace()突破代码显然不允许你从那个点开始“继续”(IDL命令)(来自JMESPath

答案 5 :(得分:1)

更新已修订的解决方案。 交互式IPython比pdb.set_trace更强大,更方便。

试试这个脚本

from IPython import embed
a = 1
b = 2
print('before')

embed()

print('after')
c = 3

embed()放在要中断的位置。 运行脚本您将进入交互式IPython Shell,您可以查看和修改变量。 退出shell后,脚本将继续运行。

答案 6 :(得分:0)

您可能只想使用Python调试器。

答案 7 :(得分:0)

欢迎来到Python社区!我还在学习,但是Python比互动数据语言更好。

无论如何,Ignacio关于使用代码模块的回答看起来可能提供你想要的东西,至少与IDL的停止并行。

您可能会觉得有用的另一件事是进入Python的交互模式并导入您的程序。然后你可以通过运行函数等与它进行交互。(不可否认,我不是这方面的专家。)如果这样做,你需要在驱动程序的文件中使用main()函数。例如,你有类似的东西:

import sys
def main():
    # do stuff
    return(0)

if __name__ == '__main__':
    sys.exit(main())

而不只是:

# do stuff

当您将程序拉入Python解释器时,这会阻止程序的执行。有关更多信息,请参阅Guido's article about main functions