subprocess
import subprocess
res = subprocess.Popen('dir',shell=True,stdout=subprocess.PIPE,stdin=subprocess.PIPE,stderr=subprocess.PIPE)
print(res.stdout.read())
复制代码
tcp 实现执行命令
socket_server_tcp
from socket import *
import subprocess
ip_port = ('127.0.0.1',8080)
back_log=5
buffer_size = 1024
tcp_server = socket(AF_INET,SOCK_STREAM)
tcp_server.bind(ip_port)
tcp_server.listen(back_log)
while True:
conn,addr = tcp_server.accept()
print('新的客户端链接',addr)
while True:
try:
cmd=conn.recv(buffer_size)
if not cmd:break#结束整个循环
print('收到的客户端的命令',cmd)
res = subprocess.Popen(cmd.decode('utf-8'), shell=True, stdout=subprocess.PIPE, stdin=subprocess.PIPE, stderr=subprocess.PIPE)
err = res.stderr.read()
if err:
cmd_res = err
else:
cmd_res = res.stdout.read()
if not cmd_res:
cmd_res='success'.encode('gbk')
conn.send(cmd_res)
except Exception as e:
print(e)
break
复制代码
tocket_client_tcp
from socket import *
ip_port = ('127.0.0.1',8080)
back_log=5
buffer_size=1024
tcp_client = socket(AF_INET,SOCK_STREAM)
tcp_client.connect(ip_port)
while True:
cmd = input('>>:').strip()
if not cmd:continue#跳出当前循环,进入下一个循环
if cmd == 'quit':break
tcp_client.send(cmd.encode('utf-8'))
cmd_res = tcp_client.recv(buffer_size)
print('命令的执行结果是',cmd_res.decode('gbk'))
tcp_client.close()
#tcp会存在粘包现象,其他协议不会存在
#tcp服务端和客户端是成套的,单独运行会出现问题,这样能够保证数据不丢失,而udp服务端和客户端是可以单独运行的
#udp只管发消息,不管有没有人接收消息,所以说发出的消息可能会丢失。
#粘包产生的两种方式:一是发送多次每次发送的字节很小,二是一次发送的太大,导致无法接收完全。
复制代码