报错:
UnicodeDecodeError: ‘gbk’ codec can’t decode byte 0xa8 in position…
1.使用functools相当于hook encoding参数
import subprocess
from functools import partial # 用来固定某个参数的固定值
subprocess.Popen = partial(subprocess.Popen, encoding='utf-8')
# 解决execjs执行js时产生的乱码报错,需要在导入execjs模块之前,让Popen的encoding参数锁定为utf-8
import execjs
2.直接点击subprocess,搜索pass_fds=(),下面的这个encoding参数就是报错点:
3.在需要执行js的方法上添加装饰器
import subprocess
from contextlib import contextmanager
from unittest.mock import patch
@contextmanager
def patched_popen_encoding(encoding='utf-8'):
original_popen_init = subprocess.Popen.__init__
def new_popen_init(self, *args, **kwargs):
kwargs['encoding'] = encoding
original_popen_init(self, *args, **kwargs)
with patch.object(subprocess.Popen, '__init__', new_popen_init):
yield