>> abcd# 执行js函数add = js2py.eval_js("function add(a, b) {return a + b};")print(add(1,2))>>> 3# 另一种方式js = js2py.EvalJs({})js.execute("js语句")骚操作一:._python执行js代码">
赞
踩
- import js2py
-
-
- # 执行单行js语句
- js2py.eval_js("console.log(abcd)")
- >>> abcd
-
- # 执行js函数
- add = js2py.eval_js("function add(a, b) {return a + b};")
- print(add(1,2))
- >>> 3
-
- # 另一种方式
- js = js2py.EvalJs({})
- js.execute("js语句")
- # 在js代码中引入python对象
- context = js2py.EvalJs({'python_sum': sum})
- context.eval('python_sum(new Array(1,4,2,7))')
- >>> 14
-
- # 在js代码中加入python代码
- js_code = '''
- var a = 10
- function f(x) {return x*x}
- '''
- context.execute(js_code)
- context.f("14") 或 context.f(14)
- >>> 196
- # 转换js文件
- js2py.translate_file('example.js', 'example.py')
-
- # 现在可以导入example.py
- from example import example
- example.someFunction()
- # 转换js代码
- js2py.translate_js('var $ = 5')
- >>>
- """
- from js2py.pyjs import *
- # setting scope
- var = Scope( JS_BUILTINS )
- set_global_object(var)
- # Code follows:
- var.registers(['$'])
- var.put('$', Js(5.0))
- """
详见:https://github.com/PiotrDabkowski/Js2Py
- import execjs
-
- js_code = open('file.js',encoding='utf-8').read()
- ctx = execjs.compile(js_code)
-
- # 第一个参数为ja代码中的函数名, 后面为函数对应的参数
- result = ctx.call('function_name', *args)
前面两种只适合执行少量js代码的情况,当有大量js代码要执行时,还是建议直接调用node
- import subprocess
-
- # js文件最后必须有输出,我使用的是 console.log
- pro = subprocess.run("node abc.js", stdout=subprocess.PIPE)
- # 获得标准输出
- _token = pro.stdout
- # 转一下格式
- token = _token.decode().strip()
py2js有时候在加载一些加密函数的时候效率低的可怜,大概是因为执行机制的不同:
py2js直接调用的nodejs引擎不过这个库用的nodejs解析语法树转成py代码,性能挺低的,还不如直接用execjs调nodejs或自己封装子进程调用;execjs调用的pyv8,不过默认的pyv8的引擎挺老的,es5好多特征都不支持
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。