socket实现OS的切换目录

#server层
#  切换目录
import socket
import os

sk = socket.socket()
sk.bind(('127.0.0.1',8080))
sk.listen()
conn,addr = sk.accept()

def send_data(conn,path):
    '''你给我一个目录,我把目录发给client'''
    lis_dir = os.listdir(path)
    str_dir = '--'.join(lis_dir) #将目录列表转换为字符串形式
    conn.send(str_dir.encode('utf-8'))

abs_path = conn.recv(1024).decode('utf-8')# 获取用户输入的绝对路径
current_dir = abs_path + '/'# 以下再处理,都要根据当前路径去处理,无论是返回上一层,还是进入下一层
send_data(conn,current_dir)# 把用户输入的路径下的所有文件及文件夹返回给客户端

# C:/Program Files (x86)/Common Files
while 1:
    cmd = conn.recv(1024).decode('utf-8')
    if cmd == '..':
        current_dir = current_dir.split('/')[:-2]    #-1是去掉转换后列表中的空格,-2是去掉按列表分隔后当前路径,即最后得到的是上一级的目录
        current_dir = '/'.join(current_dir)+'/'        #重新将列表转为字符串形式的当前路径的上一级路径
        # if 如果当前是C盘:
        #     就返回给客户端告诉说没有上一层了!
        send_data(conn, current_dir)
    else:
        filename = cmd.split(' ')[1]# 获取用户输入的文件名字,因为传过来是两个数据cmd和文件名且按空格分隔,所以文件夹需要取到第二个元素
        current_dir += filename + '/'# 将文件名字添加到当前路径下,组成一个完整的新路径
        if os.path.isdir(current_dir):# 如果客户输入的文件名字是一个文件夹
            send_data(conn, current_dir)
        else:# 如果不是一个文件夹
            conn.send(b'不是文件夹')
# conn.close()
# sk.close()




#client层
import socket
import os

sk = socket.socket()
sk.connect(('127.0.0.1',8080))

abs_path = input('请输入您的根目录:')
sk.send(abs_path.encode('utf-8'))
current_dir = sk.recv(1024).decode('utf-8')
print(current_dir.split('--'))

while 1:
    cmd = input('请输入>>>')
    # cd + 文件夹      ..
    if cmd == '..':
        sk.send(cmd.encode('utf-8'))
        current_dir = sk.recv(1024).decode('utf-8')
        print(current_dir.split('--'))
    if cmd == 'cd':
        filename = input('请输入一个文件夹名:')
        sk.send((cmd+' '+filename).encode('utf-8'))
        current_dir = sk.recv(1024).decode('utf-8')
        print(current_dir.split('--'))
、
sk.close()
原文地址:https://www.cnblogs.com/god-for-speed/p/11719043.html