You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python Socket发送系统信息报错TypeError,求解决方法

问题原因分析

你遇到的TypeError源于两个核心问题:

  • informacion()函数没有返回值,默认返回None,而Socket的send()方法要求传入字节类型的数据,无法识别None。
  • 原函数仅将硬件信息打印在服务器控制台,没有把信息整理成可通过网络传输的格式。
解决步骤

1. 修改informacion()函数,返回结构化信息字符串

把原本打印的内容拼接成一个完整字符串,每行用换行符\n分隔,最终返回该字符串:

def informacion():
    info_lines = []
    info_lines.append("="*40 + " System Information " + "="*40)
    info_lines.append(f"System: {uname.system}")
    info_lines.append(f"Node Name: {uname.node}")
    info_lines.append(f"Release: {uname.release}")
    info_lines.append(f"Version: {uname.version}")
    info_lines.append(f"Machine: {uname.machine}")
    info_lines.append(f"Processor: {uname.processor}")
    # 将所有行拼接为单个字符串,每行自动换行
    return "\n".join(info_lines)

2. 调整Socket发送逻辑

调用informacion()获取字符串后,用encode()转换成字节类型再发送,同时调整条件分支避免重复发送冗余内容:

while True:
    # 建立连接
    socketConexion, addr = socketServidor.accept()
    print("Conectado con cliente",addr)
    while True:
        # 接收客户端消息
        mensajeRecibido = socketConexion.recv(4096).decode()
        print(mensajeRecibido)
        
        if mensajeRecibido == 'exit':
            break
            
        if mensajeRecibido == 'informacion':
            # 获取系统信息并编码为字节发送
            sys_info = informacion()
            socketConexion.send(sys_info.encode())
        else:
            # 其他情况发送输入内容
            socketConexion.send(input().encode())

    print("Desconectado del cliente",addr)
    # 关闭连接
    socketConexion.close()
完整修改后的代码
# 导入库
import psutil
import platform
from datetime import datetime
from socket import *
uname = platform.uname()
direccionServidor = "localhost"
puertoServidor = 9099

# 创建新Socket
socketServidor = socket (AF_INET, SOCK_STREAM)

# 绑定地址与端口
socketServidor.bind((direccionServidor, puertoServidor))
socketServidor.listen()

def informacion():
    info_lines = []
    info_lines.append("="*40 + " System Information " + "="*40)
    info_lines.append(f"System: {uname.system}")
    info_lines.append(f"Node Name: {uname.node}")
    info_lines.append(f"Release: {uname.release}")
    info_lines.append(f"Version: {uname.version}")
    info_lines.append(f"Machine: {uname.machine}")
    info_lines.append(f"Processor: {uname.processor}")
    return "\n".join(info_lines)

while True:
    # 建立连接
    socketConexion, addr = socketServidor.accept()
    print("Conectado con cliente",addr)
    while True:
        # 接收客户端消息
        mensajeRecibido = socketConexion.recv(4096).decode()
        print(mensajeRecibido)
        
        if mensajeRecibido == 'exit':
            break
            
        if mensajeRecibido == 'informacion':
            sys_info = informacion()
            socketConexion.send(sys_info.encode())
        else:
            socketConexion.send(input().encode())

    print("Desconectado del cliente",addr)
    # 关闭连接
    socketConexion.close()

额外说明

  • 客户端收到信息后,需要调用decode()将字节转回字符串才能正常显示。
  • 如果需要添加更多硬件信息(如CPU使用率、内存占用),可在informacion()函数中通过psutil库获取后追加到info_lines列表。

内容的提问来源于stack exchange,提问作者facu_0810

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 09:35:16