实现Python与JavaScript的互操作:execjs模块详解

技术 · 05-15 · 访问: 634 次

execjs 能够让你在 Python 环境中运行 JavaScript 代码。它提供了一个接口,可以使用各种 JavaScript 运行时引擎来执行 JavaScript 代码,包括 NodeJS、PhantomJS、PyV8等。

安装

pip install PyExecJS

运行 js 代码

import execjs

# js 代码
js_code = """
function add(x, y) {
    return x + y;
}
"""

# 创建一个 JavaScript 运行环境
ctx = execjs.compile(js_code)

# 在 JavaScript 运行环境中调用 JavaScript 函数
result = ctx.call("add", 3, 5)

# JavaScript 代码返回参数
print(result)  # 输出:8

call 方法:

  • 第一个参数为需要调用的 JavaScript 函数名
  • 后续参数为函数的传参

切换运行环境

import execjs

# 使用Node.js运行时
runtime = execjs.get("Node")

# 使用V8运行时
# runtime = execjs.get("V8")

# 在所选的运行时环境中编译并执行JavaScript代码
context = runtime.compile("""
    function add(x, y) {
        return x + y;
    }
""")

result = context.call("add", 3, 5)

读取 js 文件并运行代码

import execjs


with open("qiming.js", encoding='utf-8') as f:
    js_code = f.read()
    ctx = execjs.compile(js_code)
    # call 运行 ctx 中的 js 方法,传递参数 encrpyt_data,并赋值给 decrapy_data
    decrapy_data = ctx.call("decrypt", encrypt_data)

print(decrapy_data)

封装函数

import execjs


def run_js_file(js_file, function_name, *args):
    """
    读取 JavaScript 文件并执行其中的函数
    :param js_file: JavaScript 文件路径
    :param function_name: 要调用的 JavaScript 函数名
    :param args: 传递给 JavaScript 函数的参数
    :return: JavaScript 函数的返回值
    """
    with open(js_file, encoding='utf-8') as f:
        js_code = f.read()
        ctx = execjs.compile(js_code)
        result = ctx.call(function_name, *args)
        return result
python execjs
icon_mrgreen.gificon_neutral.gificon_twisted.gificon_arrow.gificon_eek.gificon_smile.gificon_confused.gificon_cool.gificon_evil.gificon_biggrin.gificon_idea.gificon_redface.gificon_razz.gificon_rolleyes.gificon_wink.gificon_cry.gificon_surprised.gificon_lol.gificon_mad.gificon_sad.gificon_exclaim.gificon_question.gif
Theme Jasmine by Kent Liao