Python中相当于IDL的stop和.reset的功能

8

我对Python还比较新,但有一些使用IDL的经验。我想知道是否有Python等效命令来代替IDL的stop和.reset命令。

如果我运行了一些我编写的IDL脚本,并且在其中放置了一个stop命令,那么它的作用就是停止脚本并让我在脚本中间访问命令行。因此,在stop命令之前定义的所有函数和变量都可以被访问,这对于调试非常有用。

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

任何关于这些问题的帮助将不胜感激。

干杯

相关


重新标记以显示正确的IDL(IDL标签=接口描述语言) - PTBNL
8个回答

3
除了比标准Python解释器更好用的REPL外,IPython可能可以满足您的需求:
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中设置a = 10(使用上面的示例),则在主Python进程中a仍然等于5。 编辑:在IPython用户邮件列表上发布此技巧的帖子。

1
这在2010年可能是正确的,但是这个Stack Overflow答案指出,在更现代的IPython版本中,第一行应该被替换为import IPython,然后在程序中想要停止的地方放置start_shell = IPython.embed() - John Coxon

1

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

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

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

1
你可以在 IPython shell 中输入 %reset 来执行重置操作。
对于停止点,只需按照提到的方式添加 pydebug 断点即可。

1

1

stop 声音等同于使用 code 模块。在 Python 中,.reset 没有相应的功能,除非滥用 del


1
一个关于已删减内容解决方案的更新。 交互式IPython比pdb.set_trace更加强大和方便。
尝试运行这个脚本。
from IPython import embed
a = 1
b = 2
print('before')

embed()

print('after')
c = 3

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

0
欢迎来到Python社区!虽然我还在学习,但在我看来,Python比交互式数据语言更好。
无论如何,Ignacio提供的关于使用代码模块的答案似乎可以提供你想要的东西,至少相当于IDL的stop。
另一件你可能会发现有用的事情是进入Python的交互模式并导入你的程序。然后你可以通过运行函数等与之交互。(诚然,我对此并不是很专业。)如果这样做,你需要在驱动程序的文件中拥有一个main()函数。例如,你可以拥有像下面这样的内容:
import sys
def main():
    # do stuff
    return(0)

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

而不是仅仅:

# do stuff

这可以防止在将程序拉入Python解释器时执行它。更多信息请参见Guido关于主函数的文章


0

你可能只需要使用Python调试器来解决这个问题。


调试器确实可以工作。谢谢! 不过,出于好奇,是否有等效的命令? - Jamie
3
在你的代码中插入import pdb; pdb.set_trace(),将会把你带到调试器中。 - Michael Mior

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接