python-19-subprocess-tcp实现执行命令

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只管发消息,不管有没有人接收消息,所以说发出的消息可能会丢失。

#粘包产生的两种方式:一是发送多次每次发送的字节很小,二是一次发送的太大,导致无法接收完全。

复制代码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值