在Pyodide中检查Python对象

Pyodide是相当新的东西,但是我想知道是否有一种方法可以让用户像使用Js对象那样检查Python对象。例如,现在如果您用print用pyodide中的字典,则输出为字符串:

在Pyodide中检查Python对象

但是,如果您console.log是一个JavaScript对象,它会输出浏览器可以理解的内容,您可以单击以展开并查看其属性。

在Pyodide中检查Python对象

对于调试,我认为这种实用程序是必需的,几乎所有的IDE都有它。 pyodide创建了一个完整的Python环境,我不希望这太难了。

LVCHA166 回答:在Pyodide中检查Python对象

您可以将python对象发送到控制台。在python方面,您可以

pyodide.runPython(`
   myvar = {"msg": "Hello from python"}
   from js import console
   console.log(myvar)
`);

在javascript方面,您可以

console.log(pyodide.globals.myvar);

基本python类型将转换为它们的javascript等价物,并且可以直接检查。其他类型包装在Proxy对象中。 chrome devTools控制台窗口中显示的信息对于这些类型不是很有帮助。

但是chrome devTools可以使用这样的自定义格式化程序进行扩展

(function() {
  var formatter = {
    header: function(x,config) {
      if (config && config.PyProxyFormatter) {
        return ["div",{"width": "100px"},config.key + ": " + String(x)];
      }
      if (typeof x === 'function' &&
            pyodide._module.PyProxy.isPyProxy(x)) {
        return ["div",{},String(x)];
      }
      return null;
    },hasBody: function(x) {
      return true;
    },body: function(x,config) {
      var level = config !== undefined ? config.level : 0;
      if (typeof x === 'function' &&
            pyodide._module.PyProxy.isPyProxy(x)) {
        var keys = pyodide.globals.dir(x);
        var elements = keys.map(function(key) {
          var childObj = x[key];
          var child;
          if (typeof childObj === 'object' ||
              (typeof childObj === 'function' &&
               pyodide._module.PyProxy.isPyProxy(childObj))) {
            child = ["object",{ 
               object: childObj,config: {PyProxyFormatter: true,key: key,level: level + 1}}];
          } else {
            child = key + ": " + String(childObj);
          }
          return ["div",{style: "margin-left: " + level*20 + "px"},child];
        });
        return ["div",{}].concat(elements);
      } else {
        return ["div",["object",{ object: x}]];
      }
    }
  };
  window.devtoolsFormatters = [formatter];
}
)();
本文链接:https://www.f2er.com/3169674.html

大家都在问