Ric*_*ard 49 python interactive
我正在运行我的Python程序,并且有一个重点是跳入并查看正在发生的事情,然后再次退出.有点像临时控制台模式.
在Matlab中,我会使用keyboard命令来执行此操作,但我不确定python中的命令是什么.
有没有办法做到这一点?
例如:
for thing in set_of_things:
enter_interactive_mode_here()
do_stuff_to(thing)
Run Code Online (Sandbox Code Playgroud)
当enter_interactive_mode()电话,我想去那里,环顾四周,然后离开,并有计划继续运行.
Kos*_*Kos 54
code.interact() 似乎以某种方式工作:
>>> import code
>>> def foo():
... a = 10
... code.interact(local=locals())
... return a
...
>>> foo()
Python 3.6.5 (default, Apr 1 2018, 05:46:30)
[GCC 7.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> a
10
Run Code Online (Sandbox Code Playgroud)
Ctrl+ Z返回"主"解释器.
您可以阅读本地人,但修改它们似乎不会这样.
Emi*_*nov 46
python -i myapp.py
Run Code Online (Sandbox Code Playgroud)
这将执行myapp.py并将您放入交互式shell中.从那里你可以执行函数并检查它们的输出,以及myapp.py加载的整个环境(导入等).
对于更复杂的东西 - 最好使用调试器,例如pdb设置断点.此外,大多数IDE(PyDev,PyCharm,Komodo ......)都有图形化调试器.
Lau*_*low 17
我用pdb它来做这个目的.我意识到埃米尔已经在他的回答中提到了这一点,但他没有提供一个例子或详细说明为什么它回答了你的问题.
for thing in set_of_things:
import pdb; pdb.set_trace()
do_stuff_to(thing)
Run Code Online (Sandbox Code Playgroud)
您可以通过使用感叹号启动命令来读取和设置变量.您也可以在堆栈中上下移动(命令u和d),它InteractiveConsole没有内置机制.
要使程序继续执行,请使用该c命令.在上面的示例中,它将在每次循环迭代时进入调试器,因此您可能希望将句子包装set_trace()在if句子中.
Sam*_*ann 10
你有选择 - Python标准库或IPython.
Python标准库有一个code模块,它有一个InteractiveConsole类,其目的是"密切模拟交互式Python解释器的行为".这可能会做你想要的,但文档没有任何关于如何使用它的例子,我没有任何关于去哪里的建议.
IPython是一个更高级的Python终端,可以选择在你内置的程序中嵌入一个控制台.根据他们的文档,你可以简单地做
from IPython import embed
for thing in set_of_things:
embed()
do_stuff_to(thing)
Run Code Online (Sandbox Code Playgroud)
从 Python 3.7 开始,您还可以使用breakpoint()进入调试器,例如:
for thing in set_of_things:
breakpoint()
do_stuff_to(thing)
Run Code Online (Sandbox Code Playgroud)
这更容易记住和编写,并且默认情况下会在 pdb 中打开您的代码。
但是,也可以将PYTHONBREAKPOINT环境设置为可调用的名称,该名称可以是另一个调试器,例如pudb或ipdb,也可以是 IPython 的embed,或其他任何东西。