day46——使用 Socket 执行远程命令

编写一个程序,实现客户端能在服务端远程执行命令,并把命令结果在客户端打印出来

服务端: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
原文地址:https://www.cnblogs.com/yangjinbiao/p/8148948.html