使用subprocess模塊執行遠程命令
服務端代碼
1 import socket
2 import subprocess 3 4 sh_server = socket.socket() 5 sh_server.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) #重置IP和端口 6 sh_server.bind(('127.0.0.1',8001)) 7 sh_server.listen(5) 8 9 while True: #鏈接循環 10 conn,addr = sh_server.accept() #阻塞,等待客戶端過來鏈接 11 print('客戶端信息',conn,addr) 12 13 while True: #通信循環 14 # 接收客戶端發送過來的消息 15 print('----------接收命令') 16 cmd = conn.recv(buffer_size).decode('utf-8') 17 print('要執行的命令是:',cmd) 18 if cmd == 'exit' or cmd == 'quit':break 19 #使用subprocess模塊執行遠程命令 20 ret = subprocess.Popen(cmd,shell=True, 21 stdout = subprocess.PIPE, 22 stderr = subprocess.PIPE, 23 stdin = subprocess.PIPE) 24 25 err = ret.stderr.read() 26 if err: 27 ret_msg = err 28 else: 29 ret_msg = ret.stdout.read() 30 if not ret_msg: 31 ret_msg = "命令執行成功".encode('gbk') 32 print('---------命令執行完成') 33 conn.send(ret_msg) 34 35 conn.close()
客戶端代碼
1 import socket
2
3 sh_client = socket.socket() 4 sh_client.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) 5 6 sh_client.connect(('127.0.0.1',8001)) 7 8 while True: #通信循環 9 cmd = input("請輸入要執行的命令:") 10 if cmd == '': continue 11 if cmd =='exit' or cmd =='quit':break 12 sh_client.send(cmd.encode('utf-8')) 13 res_info = sh_client.recv(1024).decode('gbk') 14 print('命令執行結果是:',res_info) 15 sh_client.close()