You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Python输出传入JavaScript函数并获取返回结果?

解决Python调用JavaScript函数并传递参数的问题

问题分析

你之前的代码只是运行了JS文件并打印了全局模块对象,并没有实际调用目标函数并传递Python输出作为参数,所以得不到预期结果。下面提供两种可靠的实现方案:


方案一:正确使用js2py调用函数

如果你的Encrypt.js中定义了全局函数(比如encrypt),需要从js2py返回的上下文对象中取出函数并传参执行。

示例JS代码(Encrypt.js)

// 假设你的加密函数是这样的
function encrypt(inputStr) {
    // 这里是你的加密逻辑
    return inputStr.split('').reverse().join(''); // 示例:反转字符串
}

修正后的Python代码

import js2py

# 运行JS文件,获取包含所有全局变量的上下文对象
js_context = js2py.run_file("Encrypt.js")

# 从上下文中取出目标函数
encrypt_function = js_context.encrypt

# 准备Python输出作为参数
python_output = "需要加密的内容"

# 调用JS函数并获取返回结果
result = encrypt_function(python_output)

print(result)

注意事项

  • 如果JS代码使用了ES6+语法(比如箭头函数、let/const),js2py可能无法完全兼容,建议将JS代码转成ES5后再尝试。
  • 若translate_file生成的py文件执行异常,优先检查JS代码是否有js2py不支持的API(比如浏览器专属的window对象)。

方案二:用subprocess调用Node.js(更适合复杂JS代码)

如果你的JS依赖Node.js环境或者有复杂语法,直接调用Node.js执行脚本是更稳定的方案,通过标准输入输出传递数据。

适配的JS代码(Encrypt.js)

// 读取Python传入的标准输入数据
const inputData = require('fs').readFileSync(0, 'utf-8');

// 定义加密函数
function encrypt(data) {
    // 你的加密逻辑
    return `encrypted_${data}`;
}

// 执行函数并将结果输出到标准输出
console.log(encrypt(inputData));

Python代码实现

import subprocess

# 准备Python输出作为参数
python_output = "test_content_from_python"

# 调用Node.js执行JS脚本,传递数据并捕获输出
process_result = subprocess.run(
    ["node", "Encrypt.js"],
    input=python_output,
    capture_output=True,
    text=True
)

# 处理执行结果
if process_result.returncode == 0:
    js_return_result = process_result.stdout.strip()
    print(js_return_result)
else:
    print("执行出错:", process_result.stderr)

内容的提问来源于stack exchange,提问作者Abhishek Raina

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 15:31:12