VSCode,node.js脚本,运行调试器,最后一行有断点:
const obj = { key1: 'value1', key2: 'value2' };
console.log(obj);
console.log(JSON.stringify(obj));
console.log('');
在交互式控制台中生成以下内容:
注意,第一输出是具有可折叠细节的灰色对象,第二输出是其文本版本。
VSCode,python脚本,运行调试器,最后一行有断点:
obj = {'key1': 'value1', 'key2': 'value2'}
print(obj)
print('')
在交互式控制台中生成以下内容:
即对象的. string版本(如node.js中的console.log(JSON.stringify(obj))
)
如果python脚本仍在运行(在断点处暂停,或者坐在那里听,或者处理一些东西),我可以在交互式控制台中输入obj
,它会产生这样的结果(在交互式控制台中):
即具有可折叠细节的灰色对象
但我似乎找不到任何Python函数可以通过编程方式生成最后一个结果(而不是手动将其输入控制台)。我在脚本中简单地尝试了obj
,但该行没有输出。
我的问题是:有没有这样的功能?我怎样才能让一个python脚本/应用程序在交互式控制台中输出灰色的可折叠对象,而不仅仅是它的字符串表示?
谢谢!
几个小时后更新-为什么我需要这个?
通常我尽量不添加太多的细节,问题/职位是TL;医生,但是...在与Jialedu的聊天中,他问我为什么要特别做我要求的事情。所以...
我的示例脚本显然非常简单--只是为了说明我想要的问题。
我的实际应用程序很复杂。当然,有些是node,有些是python。在这两种情况下,它循环了大量的数据,做了大量的处理,我希望它在每次循环的迭代中处理它们之前和之后,打印出它正在处理的一些对象的一些子集。所有这一切也穿插着其他信息。
我有一个节点脚本来完成大部分工作。它持续运行,并以折叠的形式打印这些对象,因此它很简短,不会压倒控制台的视图。当它运行时,我可以一眼看到发生了什么。但是,当我看到一些可能被破坏或出于某种原因感兴趣的东西时,我可以在控制台中与它交互(上下折叠它的一些部分等),即使脚本继续运行。
当脚本运行或结束时,变量面板不显示任何内容。只有暂停的时候才会显示。我做的事时间紧迫。我在真实的分析金融图表。如果我用一个断点暂停脚本,那么它会在暂停时错过需要收集(真实的)的信息,以便在它之后(及时)的任何事情都有意义。如果没有这些,调试这个的某些方面要困难得多。
因此,我需要能够在脚本运行的大部分时间内看到缩略折叠形式的输出,而不必暂停它,然后能够跳到我看到的可能是问题或其他问题的东西,并与之交互,而脚本继续运行,而不必暂停它与输出交互。
我可以在Node中完成所有这些。效果很好。
但我的应用程序中有一些特定但类似的功能,需要用python编写,而不能用node/JavaScript完成。所以我用python写的,我需要在它运行的时候真实的分析它在做什么,所有的方式都和node一样。
希望这能帮上忙。
3条答案
按热度按时间5vf7fwbs1#
如果不设置断点,则调试代码的结果与运行代码的结果相同。
简单地运行代码自然只输出结果,为什么需要在结果中显示过程的变量?这是不合理的。
如第一张图所示,如果不设置断点,将不会显示中间变量。
就是这样,没有断点来挂起调试,自然也看不到进程中存在的对象及其变量。
cetgtptt2#
我在很多地方都问过这个问题(包括官方的VSCode-python支持),不幸的是,通用的答案似乎是:
这是不可能做到的,至少在没有我们[VS Code python扩展开发人员]为它构建自定义函数的情况下是不可能做到的。
好吧
ylamdve63#
使用str()和repr()方法的实现。您可以在类中定义它们以获取有关对象的信息(请参阅https://www.digitalocean.com/community/tutorials/python-str-repr-functions)。