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

 

posted @ 2024-06-04 19:22  X-Wolf  阅读(259)  评论(0)    收藏  举报