zoukankan      html  css  js  c++  java
  • python案例远程执行命令

    ------类似于cmd的功能,client执行命令,server发命令结果发送到client

    -----------server.py-------------------

    import subprocess
    #subprocess.Popen,主要用Popen这个类实现shell

    import socket
    sk=socket.socket()
    print(sk)
    address=('127.0.0.1',8003)
    sk.bind(address)
    sk.listen(3)
    print('waiting.....')
    while True:
    conn,addr = sk.accept()
    print(addr)
    while True:
    try:
    data = conn.recv(1024)
    except Exception:
    break
    if not data: break
    print('.....', str(data, 'utf8'))
    obj=subprocess.Popen(str(data,'utf8'),shell=True,stdout=subprocess.PIPE)
    #stdout=subprocess.PIPE表示通过管道PIP由你的子进程转到我主进程并封装到obj对象里
         ----即这一行和下面这一行的功能就是把client发来指令的结果解出来
            cmd_result=obj.stdout.read()
    result_len=bytes(str(len(cmd_result)),'utf8') #算出它的大小
    conn.sendall(result_len) #把这个大小的数字传给client

    conn.recv(1024)

    conn.sendall(bytes(cmd_result))
    sk.close()


    -----------------------------client.py-------------------------------
    import socket
    sk=socket.socket()
    print(sk)
    address=('127.0.0.1',8003)
    sk.connect(address)
    while True:
    inp=input('>>>')
    if inp == 'exit':
    break
    sk.send(bytes(inp,'utf8'))

    result_len=int(str(sk.recv(1024),'utf8'))

    sk.sendall(bytes('111','utf8'))

    print(result_len)
    data=bytes()
    while len(data) != result_len:
    recv= sk.recv(1024)
    data+=recv

    print(str(data,'gbk'))
    sk.close()


    结果如下图:client执行diripconfig等命令能拿到结果






  • 相关阅读:
    上下界网络流——概念解析与快速入门(待修改)
    maomao的现在与未来
    exgcd证明和最基础应用
    快速入门Splay
    luogu 2515
    bzoj 1996
    *51nod 1409
    51nod 1412
    51nod 1503
    51nod 1020
  • 原文地址:https://www.cnblogs.com/dbslinux/p/11239650.html
Copyright © 2011-2022 走看看