这是由于js文件中存在非gbk编码的字符(中文或特殊符号),导致subprocess.Popen在默认使用gbk编码的情况下打开文件报错:
UnicodeDecodeError: 'gbk' codec can't decode byte 0xae in position 134: illegal multibyte sequence
我们只需要使用偏函数(partial)来修改它的默认encoding即可正常使用。
注意!顺序不能错了,必须在修改完成之后再 import execjs 否则会因为闭包导致没改到,继续报错。
import subprocess
from functools import partial
subprocess.Popen = partial(subprocess.Popen, encoding='utf8')
import execjs

发表回复