首页 > 解决方案 > 将变量从 Javascript 传递到 Python 脚本

问题描述

我正在尝试使用 Javascript 来调用 Python 脚本。此外,我必须将变量从我的 Javascript 传递给 Python 脚本。在 Python 中返回结果后,我想将此结果传递回 Javascript。我不确定最好的方法是什么。

我已经看到了烧瓶和 json 的各种实现,但我很困惑哪种方法是最好的方法。

举个例子,这就是我想要做的:

Javascript.js

myJSVariable1 = “Hello “

myJSVariable2 = “World!” 

result = callPythonScript(myJSVariable1, myJSVariable2)

console.log(result)

pythonScript.py

print(myJSVariable1, myJSVariable2)

在此示例中,我希望 console.log(result) 返回“Hello World!” 因为 pythonScript.py 打印 myJSVariable1 与 myJSVariable2 连接的结果。

有没有人对做这样的事情有任何建议?

标签: javascriptpythonjson

解决方案


变量是一个与单一编程语言密切相关的概念,实际上甚至是单一编程语言实现。在编程语言之间传递变量,甚至在同一编程语言的不同实现之间传递变量通常是不可能的,除非这些实现是专门为允许这种多语言编程风格而编写的。

我知道有四种编程语言实现框架被明确设计为允许以支持多语言编程的方式编写编程语言实现:

然而,不幸的是,似乎没有一个同时具有生产质量的 Python 和 ECMAScript 实现:

  • Parrot 被遗弃,自 2016-02-16 以来没有发布,自 2017-10-02 以来没有提交。

  • 目前,在 Rubinius 上,除了 Ruby 之外,没有其他语言实现可用于生产:

    • 龙卷风
    • Tofu(ECMAScript 实现;你会注意到除了 README 之外什么都没有写)
  • DLR 的精简、冻结版本作为 .NET 的一部分提供,但 Microsoft 本身已经放弃了它。不过,它仍在作为IronLanguages项目的一部分进行开发。

    • IronPython是 DLR 上 Python 2 的成熟、可生产就绪的实现,但Python 3 支持尚未生产就绪。
    • 不幸的是,DLR 上的所有 ECMAScript 实现都已被放弃:

    • Managed JScript 是 Microsoft 的官方 ECMAScript 实现,旨在成为 DLR 的典型代表之一,但它从未发布过并且早已被废弃。

    • IronJS被废弃了。
  • Truffle 得到积极维护、积极开发和生产准备。

    • GraalJS得到积极维护、积极开发和生产准备。
    • 不幸的是,Truffle 的两个 Python 实现目前仍在开发中:

    • GraalPython

    • 压缩包

因此,正如您所看到的,虽然有一些多语言编程语言实现框架,并且这些框架有一些 Python 和 ECMAScript 实现,但不幸的是,没有一个框架同时具有 Python 和 ECMAScript 的生产就绪实现:DLR 有Python (2) 但没有 ECMAScript,Truffle 有 ECMAScript 但没有 Python。

但是,您传递变量的想法还有另一个问题:Python 和 ECMAScript 都没有具体化变量,IOW,变量不是这些语言中的对象(或原语)。而且您只能传递,即对象和原语。


推荐阅读