编写一个程序,实现客户端能在服务端远程执行命令,并把命令结果在客户端打印出来
服务端:192.168.5.131
客户端:192.168.5.134
1 [root@localhost ~]# cat client.py 2 #!/usr/bin/env python 3 #-*- coding:utf-8 -*- 4 5 import sys 6 import tab # tab模块用于让客户端支持命令tab补齐,需要自己编写该模块,参考:tab.py 7 import socket 8 9 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 10 s.connect(('192.168.5.131', 1234)) 11 12 while True: 13 cmd = raw_input('Please input command: ').strip() 14 if cmd == 'exit' or cmd == 'quit': 15 sys.exit() 16 if cmd: 17 s.sendall(cmd) 18 data = s.recv(1024) 19 print data 20 21 s.close()
1 [root@localhost ~]# cat server.py 2 #!/usr/bin/env python 3 #-*- coding: utf8 -*- 4 5 import socket 6 from subprocess import Popen, PIPE 7 8 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 9 s.bind(('192.168.5.131', 1234)) 10 s.listen(5) 11 connect, address = s.accept() 12 13 while True: 14 cmd = connect.recv(1024) 15 p = Popen(cmd, stdout=PIPE, stderr=PIPE) 16 stdout = p.stdout.read() 17 stderr = p.stderr.read() 18 if stdout: 19 connect.sendall(stdout) 20 elif stderr: 21 connect.sendall(stderr) 22 23 s.close()
先运行 server.py ,然后在客户端执行远程命令:
1 [root@localhost ~]# python client.py 2 Please input command: ls 3 anaconda-ks.cfg 4 client.py 5 install.log 6 install.log.syslog 7 server.py 8 9 Please input command: df 10 Filesystem 1K-blocks Used Available Use% Mounted on 11 /dev/sda3 20338948 1352204 17953580 8% / 12 tmpfs 767420 0 767420 0% /dev/shm 13 /dev/sda1 99150 27809 66221 30% /boot 14 15 Please input command: exit