【问题标题】:Passing variables from Javascript to a Python script [duplicate]将变量从Javascript传递到Python脚本[重复]
【发布时间】:2019-10-18 09:09:27
【问题描述】:

我正在尝试使用 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 连接的结果。

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

【问题讨论】:

  • 为什么这个标签是json
  • 你为什么要这样做?在什么情况下?它会在两者之间传递大量数据的服务器上运行,还是实际上只是一个一次性的简单 hello world?
  • 您实际上是在要求做一些事情,例如从 js 模块内部执行 python 代码。您可以在命令行上传递参数,通过您的操作系统执行 python 代码,并处理返回的值。在 python 端,您将解析命令行参数、调用函数并写入 STDOUT。您可能真正要求做的是从浏览器内部调用服务器端 python 函数。在这种情况下,它可能与 Run Python script from AJAX or JQuery 重复

标签: javascript python json


【解决方案1】:

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

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

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

  • Parrot 已被废弃,自 2016 年 2 月 16 日以来没有发布,自 2017 年 10 月 2 日以来没有提交。

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

    • Typhon
    • Tofu(ECMAScript 实现;你会注意到除了 README 之外什么都没有写)
  • DLR 的精简、冻结版本作为 .NET 的一部分提供,但 Microsoft 本身已经放弃了它。不过,It is still being developedIronLanguages 项目的一部分。

    • IronPython 是 DLR 上 Python 2 的成熟、可生产就绪的实现,但是 Python 3 support 还没有生产就绪。
    • 很遗憾,DLR 上的所有 ECMAScript 实现都已被放弃:

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

    • IronJS 已弃用。
  • Truffle 得到积极维护、积极开发和生产准备。

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

    • GraalPython

    • ZipPy

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-17
    • 1970-01-01
    • 1970-01-01
    • 2016-06-21
    • 1970-01-01
    相关资源
    最近更新 更多