从JavaScript调用Brython函数

时间:2015-08-03 22:36:57

标签: javascript python-3.x brython

编辑:Google Group post

我正在玩Brython

我试图弄清楚如何从JavaScript执行Brython代码。

http://www.brython.info/static_doc/en/jsobjects.html< - 这看起来像相关的文档页面,但似乎缺少从JavaScript调用Brython函数的示例。

根据我的具体情况,我正在收听MIDI事件(使用https://github.com/cwilso/WebMIDIAPIShim

我希望执行Brython代码以响应收到的MIDI事件。

目前我正在尝试:

function myMIDIMessagehandler( event ) 
{
    if( brythonListener != null )
        brythonListener( event );

和Brython代码:

<script type="text/python3">

from browser import document as doc, window, html

def foo(event):
    print("BRYTHON!" + event);

window.brythonListener = foo

</script>

但是当我在midi键盘上按下一个音符时,我得到了:

enter image description here

我不知道该怎么做这个错误,而且我一点也不确定这种方法是否合理。

1 个答案:

答案 0 :(得分:4)

这已经是一年了,所以我猜你很久以前就已经解决了这个问题,但是原则上你的方法是正确的,我做同样的事情,当你用window.js_func = py_func映射它时它会起作用。以下是我目前使用的代码中的一些相关内容,适用于chrome / firefox:

  var gm = require('gm');
    var image = random() + '.png';
        var pathToFile = path.join(__dirname, req.files[i].path)
        , pathToSnapshot = path.join(__dirname, '/uploads/document_thumb/' + image);
        gm(pathToFile).thumb(150, // Width
                            150, // Height
                            pathToSnapshot, // Output file name
                            40, // Quality from 0 to 100
        function (error, stdout, stderr, command) {
            if (!error) {
                        console.log(command);
                    }
                    else {
                        console.log(error);
                    }
                });

有用的东西是,如果你使用window.console.log(事件),你将把事件作为一个对象,你可以从开发工具中探索。另一方面,打印将其展平为纯文本。

一个更大的问题可能是使用Brython找出某些类型的错误的原因是非常棘手的(尽管对Brython都很尊重,但它很棒并且工作得非常好。)

使得更容易找到像这样的问题的底层的一件事是源映射。我最近将一个个人项目从Brython转移到了Transcrypt,发现Transcrypt的sourcemap支持有助于隔离错误原因。这么多,所以我没有尝试逐步进行,但只是大胆地编译python源并逐个跟踪错误,直到一切正常(python部分大约是2700行)。对我来说,在另一个方向上这是不可能的,但可能不适合那些了解Brython内部人员的人。