扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
execjs怎么在python中使用?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
创新互联-专业网站定制、快速模板网站建设、高性价比西区网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式西区网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖西区地区。费用合理售后完善,十余年实体公司更值得信赖。模块安装
pip install PyExecJS
配置
该模块需要JS运行时环境
以下JS runtime经过官方测试认可,建议采用
PyV8:一个调用Google V8引擎的Python模块
Node.js 本文采用该运行时
PhantomJS
Nashorn
以下JS runtime也支持但未经过官方测试
Apple JavaScriptCore - Included with Mac OS X
JScript :windows自带JS解释器,IE浏览器
SlimerJS
注:对于PyV8模块目前google上只提供了支持Python2的模块安装,尚不支持Python3,使用pip直接安装时会报错。经过各种搜索,提示需要更新pip和setuptools到最新版,依然无法解决。
对于使用JScript环境的用户,只要在IE浏览器下运行无报错的js代码也可直接运行,不需要另外安装运行时环境
代码编写
js代码执行之前需要在运行时环境下编译才能执行
由于该js环境下没有window
、document
对象,也没有console面板,因此在使用某些基于浏览器的原生对象在编译过程时会报错。所以在使用compile
函数时尽量以函数的形式来写js代码,方便Python调用。
import execjs name = execjs.get().name # 获取JS的运行时名称,写代码时可不写 ctx = execjs.compile(""" function add(x, y) { return x + y; } """) # 获取代码编译完成后的对象 ctx.call("add", 1, 2) # 调用js函数add,并传入它的参数 ctx.eval("add({0}, {1})").format(1,2) # 使用eval的写法同上,但是在传入字符串或者其他类型的数据时需要添加对应的格式,如下所示,具体可在程序中debug ctx.eval('add("{0}", "{1}")').format("1","2")
另外有时候js代码过长,我们可以将js代码先保存到文件中。
由于历史遗留问题,ExecJS以前使用python2编写的,所以在代码实现过程中会涉及到文件编码的问题。ExecJS先将js代码读到内存中,然后再把调用js的代码和js文件的代码一同写入到一个临时文件(C:\Users\user\AppData\Local\Temp\xx.js)中。
如果js文件采用的是UTF-8编码,那么在写入到临时文件时,模块会报UnicodeEncodeError: 'gbk' codec can't encode character xxx
,主要是因为模块在进行文件写入时采用的是windows的默认编码gbk,而没有指定encoding=utf-8
,所以js文件需要以gbk编码保存。
import execjs with open(r"C:\Users\user\Desktop\security.js", 'r') as f: content = f.read() #读取js文件的全部内容到content变量中 ctx = execjs.compile(content) jscode = 'getkey("{0}","10001","{1}")'.format(username, pubkey) print(ctx.eval(jscode))
关于execjs怎么在python中使用问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注创新互联成都网站设计公司行业资讯频道了解更多相关知识。
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流