zoukankan      html  css  js  c++  java
  • socket实现在python中调用操作系统的命令(subprocess)

    在python中调用操作系统的命令
    import os
    import subprocess
    # r = os.popen('ipconfig')
    r = subprocess.Popen('ls',shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)、
    # subprocess.Popen(cmd,shell=True,subprocess.stdout,subprocess.stderr)
    # cmd : 代表系统命令
    # shell = True   代表这条命令是 系统命令,告诉操作系统,将cmd当成系统命令去执行
    # stdout   是执行完系统命令之后,用于保存结果的一个管道
    # stderr   是执行完系统命令之后,用于保存错误结果的一个管道
    stdout = r.stdout.read().decode('gbk')
    stderr = r.stderr.read().decode('gbk')
    print('正确的返回结果:',stdout)
    print('错误的返回结果:',stderr)
    print('错误的返回结果:',stderr)            #保存变量的方法使得能得到两个错误的信息,否则只能得到一次错误的结果
    
    
    #客户端发送一条命令用于调用服务器的系统命令
        # 客户端发送要执行命令
        # 服务器执行,执行完将结果返回给客户端
        # 客户端拿到结果呈现到用户眼前
    #server层
    import socket
    import subprocess
    sk = socket.socket()
    sk.bind(('127.0.0.1',8080))
    sk.listen()
    conn,addr = sk.accept()
    while 1:
        cmd = conn.recv(1024).decode('utf-8')
        r = subprocess.Popen(cmd,shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
        stdout = r.stdout.read()
        stderr = r.stderr.read()
        if stderr:
            conn.send(stderr)
        else:
            conn.send(stdout)
    conn.close()
    sk.close()
    
    #client层
    import socket
    sk = socket.socket()
    sk.connect_ex(('127.0.0.1',8080))
    while 1:
        cmd = input('请输入一个命令>>>')
        sk.send(cmd.encode('utf-8'))
        #因为服务器是windows,执行的命令是GBK格式,所以传回来后需要进行解码,解码为GBK格式
        result = sk.recv(102400).decode('gbk')
        print(result)
    sk.close()
  • 相关阅读:
    js返回上一页并刷新思路
    C#字符串拼接
    html2canvas截图问题,图片跨域导致截图空白
    VS2017未能添加对"System.Drawing.dll"的引用
    微信小程序云开发获取文件夹下所有文件
    js解析json报错Unexpected token i in JSON at position 1
    人工智能学习
    suricata的模块和插槽
    学习助手开发(二)——表单排序
    成功在Caterpillar代码中插入事件对象-20200917
  • 原文地址:https://www.cnblogs.com/god-for-speed/p/11719027.html
Copyright © 2011-2022 走看看