python之pyexecjs
pyexecjs是一个用Python来执行JavaScript代码的工具库,该库支持多种JavaScript运行时环境,如Node.js、PhantomJS、SlimerJS等,允许开发者在Python中无缝地调用和执行JavaScript代码。
[安装]
pip install pyexecjs
[使用]
1.eval方式
import execjs
print(execjs.eval('"abc aaa bbb".split(" ")'))
['abc', 'aaa', 'bbb']
# 调用变量名
text = execjs.compile(open(r'text.js').read())
print(text.eval('d'))
2.compile+call
# text.js 文件
var t 666;
function add(a, b) {
return a+b
}
# python文件
import execjs
text = execjs.compile(open(r'text.js').read())
# 调用函数
print(text.call('add', 1, 2))
# 获取变量名
print(text.eval('t'))
常见问题:
1.调用open打开文件由于编码格式导致的读取失败, 需要指定一下编码
txt = execjs.compile(open('jsTools.js', 'r', encoding='utf-8').read())
2. UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0xad in position 20: illegal
原因:错误出在python内部的subprocess.py文件中, 默认使用的是非utf-8的编码导致
解决:
1) 打开subprocess.py文件,找到初始化函数__init__(),修改参数的默认值为encoding=‘utf-8’,程序运行不再报错 (这种方式对系统函数进行了修改,不推荐)
2) 借助偏函数partial,固定默认参数
import subprocess from functools import partial subprocess.Popen = partial(subprocess.Popen, encoding="utf-8")
# 重点: 这三句话,在导入 execjs之前写进去
import execjs