Python调用js的方式

目录

          • 零、样例demo.js
          • 一、execjs
          • 二、MiniRacer
          • 三、NodeVM
          • 四、nodejs服务调用

零、样例demo.js
// demo.js
function get_m(a, b){m = a+breturn m
}module.exports = {get_m
}
一、execjs
  • 依赖:execjs会自动使用当前电脑上的运行时环境(建议用nodejs)
  • 安装:pip install PyExecJS
  • 导包:import execjs
  • 调用方式1: execjs.compile(js代码).call(函数名参数1参数2) ,此种方式建议js代码存到文件中
    import execjswith open(r"./demo.js", encoding="utf-8") as f:ctx = execjs.compile(f.read())print(ctx.call('get_m', 5, 6))  # 11
    
  • 调用方式2:execjs.eval(js代码)
    import execjsprint(execjs.eval("cookie='Hm_lvt_444ece9ccd5b847838a56c93a0975a8b=1636208098'"))
    
二、MiniRacer
  • 安装:pip install py_mini_racer
  • 导包:from py_mini_racer import MiniRacer
  • 调用方式如下
    from py_mini_racer import MiniRacerwith open(r"./demo.js", encoding="utf-8") as f:ctx = MiniRacer()ctx.eval(f.read())print(ctx.call('get_m', 5, 6))
    
三、NodeVM
  • 安装:pip install node_vm2
  • 导包:from node_vm2 import NodeVM
  • 调用方式1如下:调用js文件
    from node_vm2 import NodeVMwith open(r"./demo.js", encoding="utf-8") as f:ctx = NodeVM.code(f.read())print(ctx.call_member("get_m", 5, 6))
    
  • 调用方式2如下:使用eval
    from node_vm2 import evalprint(eval("cookie='Hm_lvt_444ece9ccd5b847838a56c93a0975a8b=1636208098'"))
    
  • 换了个电脑环境突然报错:TypeError: write() argument must be str, not bytes ,首先第一步488行去掉.encode("utf-8")
    在这里插入图片描述
    在这里插入图片描述
  • 然后运行接着又报错'str' object has no attribute 'decode',然后去掉395行如下的.decode("utf-8"),然后就正常了
    在这里插入图片描述
    在这里插入图片描述
四、nodejs服务调用
  • 该文章末尾


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部