在Python doctest中是否有一种方法可以重新启动或重置Python解释器?

15

我正在撰写一个简短的教程,希望能够使用Python的doctest来运行其中的示例。

python -m doctest foo.txt

在教程中有一个点,我想开始使用一个新的、干净的Python解释器。是否有一种方法可以做到这一点?

3个回答

0

您可以使用代码模块创建新的解释器。您甚至可以复制全局/局部变量。

在Blender文档这里中有一个很好的例子。

他们建议如下:

在脚本的中间,您可能想要检查变量、运行函数和检查流程。

import code
code.interact(local=locals())

如果您想访问全局和局部变量,请运行以下代码:

import code
namespace = globals().copy()
namespace.update(locals())
code.interact(local=namespace)

下一个例子是上面脚本的等效单行版本,更容易粘贴到您的代码中:
__import__('code').interact(local=dict(globals(), **locals()))

在脚本的任何一行中添加code.interact,将会暂停脚本并在终端中启动交互式解释器,完成后您可以退出解释器,脚本将继续执行。


这在doctest中仍然无法工作,因为doctest如何解释>>>提示符。我想可以创建InteractiveConsole的实例,将命令推送到它上面以将sys.PS1设置为其他内容,然后开始与其交互。如果再次出现这种情况,也许我会尝试一下这个方法。 - EHN

-1
如果你只想在Python解释器中启动一个新的Python解释器,你可以使用以下命令:os.system('python')。
Python 2.6.6 (r266:84297, Aug 24 2010, 18:46:32) [MSC v.1500 32 bit (Intel)] on
win32
Type "help", "copyright", "credits" or "license" for more information.
>>> dir()
['__builtins__', '__doc__', '__name__', '__package__']
>>> import os
>>> dir()
['__builtins__', '__doc__', '__name__', '__package__', 'os']
>>> os.system('python')
Python 2.6.6 (r266:84297, Aug 24 2010, 18:46:32) [MSC v.1500 32 bit (Intel)] on
win32
Type "help", "copyright", "credits" or "license" for more information.
>>> dir()
['__builtins__', '__doc__', '__name__', '__package__']
>>> quit()
0
>>> dir()
['__builtins__', '__doc__', '__name__', '__package__', 'os']
>>>

然而,如果您想重新启动或重置Python解释器,而不像上面那样开始一个新的Python解释器,您可以查看此解决方案。我还没有探索它,但应该能帮助您开始。

静默重新启动Python解释器


聪明,但在doctest内部不起作用:当子进程启动时,它会等待来自stdin的输入。我需要探索一下doctest如何处理stdin和stdout,看看是否可以使用popen相关解决方案... - EHN
使用savestate配方引用的“安静地重新启动Python解释器”的方法并没有真正重置状态,例如它不会取消定义任何交互式定义的函数。 - EHN

-3
在IDLE中执行文件,只需按下键盘上的F5键。您还可以从菜单栏中选择“运行”→“运行模块”。无论哪种选项,都将重新启动Python解释器,然后使用全新的解释器运行您编写的代码。

这个答案特定于您使用的集成开发环境,可能无法回答您的问题。 - luxcem
此答案针对您使用的IDE,可能无法回答问题。 - luxcem

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