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

文章介绍了在Python中运行JavaScript代码的三个库:execjs、py_mini_racer和node_vm2。它们分别提供了不同的JavaScript执行环境,如纯V8环境和Node.js沙箱。文章还提到了遇到的编码问题及其解决方案,即修改相应文件的编码设置为utf-8。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值