基于tcp实现远程执行命令

import subprocess

subprocess.Popen('dir',shell=True) shell是命令解释器

stdout  标准输出

stdin   标准输入

stderr  标准错误输出

客户端断开链接,服务端要加异常处理,注意不同平台式不一样的,有的是客户端断开链接,服务端不再阻塞,接收一直为空

对于window用try。。。except,其它平台可用if not。。。:break

异常处理机制

window使用:

客户端正常断开,不会阻塞,服务端接收一直为空,用if来处理

用异常处理来解决客户端非正常关闭情况下会出现的问题,try。。。except

import socket
import subprocess
ip_port=('192.168.1.6',8002)
back_log=5
buffer_size=1024
tcp_server=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
tcp_server.bind(ip_port)
tcp_server.listen(back_log)
print('------>')
while True:
    conn,addr=tcp_server.accept()
    print(conn)
    print(addr)
    while True:
        try:
            cmd=conn.recv(buffer_size)
            if not cmd:break
            print('来自客户端的消息',cmd.decode('utf-8'))
            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()
            conn.send(cmd_res)
        except Exception:
            break
    conn.close()
tcp_server.close()
tcp_server
import socket
ip_port=('192.168.1.6',8002)
buffer_size=1024
tcp_client=socket.socket(socket.AF_INET,socket.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'))
    print(123)
    cmd_res=tcp_client.recv(buffer_size)
    print('来自服务端的消息',cmd_res.decode('gbk'))
tcp_client.close()
tcp_client

转载于:https://www.cnblogs.com/jintian/p/10970909.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值