Python之js2py
python中运行js代码,js代码转python代码。
安装模块
pip install js2py
js2py方法
eval_js
import js2py
add1 = js2py.eval_js('function add(a, b){return a+b};')
if __name__ == '__main__':
print(add1(1, 4)) # 5
print(add1(1, "2")) # 12
EvalJs
import js2py
js = js2py.EvalJs()
js.execute('var demo="demo111"; function add(a, b){return a+b};')
if __name__ == '__main__':
print(js.demo) # demo111
print(js.add(1, 2)) # 3
parse_js
查看js代码的解析树。解析树是字典形式。
import js2py
from pprint import pprint
js_tree = js2py.parse_js('function add(a, b){return a+b};')
if __name__ == '__main__':
pprint(js_tree)
输出如下信息:
{'body': [{'body': {'body': [{'argument': {'left': {'name': 'a',
'type': 'Identifier'},
'operator': '+',
'right': {'name': 'b',
'type': 'Identifier'},
'type': 'BinaryExpression'},
'type': 'ReturnStatement'}],
'type': 'BlockStatement'},
'defaults': [],
'expression': False,
'generator': False,
'id': {'name': 'add', 'type': 'Identifier'},
'params': [{'name': 'a', 'type': 'Identifier'},
{'name': 'b', 'type': 'Identifier'}],
'type': 'FunctionDeclaration'},
{'type': 'EmptyStatement'},
{'type': 'EmptyStatement'}],
'type': 'Program'}
translate_js
js转py代码
import js2py
code = js2py.translate_js('var name="var_name_value";let name1="let_name_value";function add(a, b){return a+b};')
if __name__ == '__main__':
with open('dd.py', 'w') as fp:
fp.write(code)
dd.py文件
内容如下:
from js2py.pyjs import *
# setting scope
var = Scope( JS_BUILTINS )
set_global_object(var)
# Code follows:
var.registers(['add', 'name1', 'name'])
@Js
def PyJsHoisted_add_(a, b, this, arguments, var=var):
var = Scope({'a':a, 'b':b, 'this':this, 'arguments':arguments}, var)
var.registers(['a', 'b'])
return (var.get('a')+var.get('b'))
PyJsHoisted_add_.func_name = 'add'
var.put('add', PyJsHoisted_add_)
var.put('name', Js('var_name_value'))
var.put('name1', Js('let_name_value'))
pass
pass
pass
怎么使用转化的py文件
进入python解释器中,分别输入如下的内容:
import dd
# 获取js中name变量
dd.var.get('name')
# 获取js中name1变量
dd.var.get('name1')
# 调用js中的add函数
dd.var.get('add')(3,4)
如下图:


浙公网安备 33010602011771号