Python代码报错排查:TypeError: bytes类型无法JSON序列化,错误源于JSON编码还是Socket发送阶段?
问题分析与解答
这个错误完全是在JSON编码数据的阶段产生的,和Socket向客户端发送数据的步骤没有关系,我们可以从报错回溯和代码逻辑两方面来确认:
1. 从报错回溯定位错误阶段
看你提供的报错栈:
Traceback (most recent call last): ... File "backdoor.py", line 18, in reliable_send self.json_data = json.dumps(data) ... TypeError: Object of type bytes is not JSON serializable
错误直接触发在json.dumps(data)这一行——也就是你尝试把command_result转成JSON字符串的时候,此时还没有执行到self.connection.send的发送逻辑,所以和Socket发送环节无关。
2. 代码逻辑层面的原因
你的execute_command函数返回的是subprocess.check_output()的结果,这个函数默认返回bytes类型的命令输出。而JSON序列化器(json.dumps)只能处理Python原生的可序列化类型(比如字符串、整数、列表等),bytes类型不在这个范围内,因此触发了序列化失败的错误。
修复方案
只需要把execute_command返回的bytes数据转换成字符串即可,建议指定编码(比如UTF-8):
def execute_command(self, command): que = subprocess.check_output(command, shell=True) # 将bytes转成UTF-8编码的字符串 return que.decode("utf-8")
如果命令输出可能存在编码不兼容的情况,可以添加错误处理,避免解码失败:
return que.decode("utf-8", errors="replace")
这样修改后,command_result就变成了字符串类型,json.dumps可以正常序列化,后续的Socket发送步骤也能顺利执行。
内容的提问来源于stack exchange,提问作者Nafiyad
相关产品推荐
相关产品推荐

