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

如何在Socket上运行Python命令?需实现远程/etc目录文件列表

嘿,我懂你的需求啦——你当前的代码其实是在本地客户端执行了os.listdir('/etc'),而不是在Socket连接的服务端上运行这个命令。要实现让服务端执行该操作并把结果返回给客户端,我们需要分别编写服务端和客户端的代码,通过Socket来传递数据。

服务端代码(负责执行命令并返回结果)

import socket
import os

# 初始化Socket服务端
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(('localhost', 10000))
server_socket.listen(5)

print("服务端已启动,等待客户端连接...")

while True:
    # 接受客户端连接请求
    client_conn, client_addr = server_socket.accept()
    print(f"已建立连接:{client_addr}")
    
    try:
        # 在服务端本地执行获取/etc目录列表的操作
        etc_file_list = os.listdir('/etc')
        # 将列表转换为字符串并编码成字节流(Socket仅支持字节传输)
        response = '\n'.join(etc_file_list).encode('utf-8')
        # 发送结果给客户端
        client_conn.sendall(response)
    except Exception as e:
        # 捕获异常并返回错误信息
        error_info = f"执行失败:{str(e)}".encode('utf-8')
        client_conn.sendall(error_info)
    finally:
        # 关闭与当前客户端的连接
        client_conn.close()

客户端代码(负责请求结果并展示)

import socket

# 初始化Socket客户端
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect(('localhost', 10000))

try:
    # 循环接收服务端发送的数据(处理大结果分块传输的情况)
    received_bytes = b''
    while True:
        chunk = client_socket.recv(4096)
        if not chunk:
            break
        received_bytes += chunk
    # 解码字节数据并转换为文件列表
    etc_files = received_bytes.decode('utf-8').split('\n')
    print("服务端/etc目录的文件列表:")
    for file in etc_files:
        print(file)
except Exception as e:
    print(f"接收数据时出错:{str(e)}")
finally:
    # 关闭客户端Socket
    client_socket.close()

运行注意事项

  • 先启动服务端代码,再运行客户端代码
  • 如果服务端部署在远程机器上,把代码中的localhost替换为服务端的公网/局域网IP地址
  • 确保服务端进程有访问/etc目录的权限(一般默认用户都有读取权限)
  • 这只是基础实现,生产环境中建议添加数据加密、身份验证等安全措施

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:48:49