python执行调用js文件的几种方式与问题

1:execjs

import execjs

def getpwd_(val1,val2):
    with open(r"./douyin.js", encoding="utf-8") as f:
        ctx = execjs.compile(f.read())
    jiami= ctx.call('get_m', val1, val2)
    return jiami

常见问题:报错编码gkb不正确。

解决的话点击报错的位置的上一行,也就是\Python3.6\lib\subprocess.py的文件encoding处,将编码改为utf-8

    def __init__(self, args, bufsize=-1, executable=None,
                 stdin=None, stdout=None, stderr=None,
                 preexec_fn=None, close_fds=True,
                 shell=False, cwd=None, env=None, universal_newlines=None,
                 startupinfo=None, creationflags=0,
                 restore_signals=True, start_new_session=False,
                 pass_fds=(), *, encoding="utf-8", errors=None, text=None):
        """Create new Popen instance."""
        _cleanup()
 

2:py_mini_racer 库的MiniRacer包

from py_mini_racer import MiniRacer

这个包是一个纯净的v8环境,没用node的环境,使用方式与execjs类似;

def get_pwd(valu1):
    ctx = MiniRacer()
    with open('text.js', mode='r', encoding='utf-8') as f:
        code = f.read()
    ctx.eval(code)
    jiami = ctx.call("getpwd",valu1)
    return jiami

.call后面第一个是js中要运行返回值的方法名字,后面的话是需要传入的值,也可以修改code的字符来达到传值的的目的。

3.node_vm2的沙箱

from node_vm2 import VM

def getpwd(val1,):
    with open('text.js', mode='r', encoding='utf-8') as f:
        code = f.read()
    with VM() as vm:
        vm.run(code)
        jiami = vm.call('getpwd',val1)
        jiami2 =vm.run('getpwd()')
        print(jiami2)
        return jiami

运行方法也是类似,不过有时候也会与execjs一样,报错编码问题,解决方案是将encoding ='utf-8'删掉。要删的源文件是 Python lib site-packages node

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值