稍等片刻,正在加载中...

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)

如下图:

posted @ 2021-01-13 16:21  一切皆往事  阅读(971)  评论(0)    收藏  举报