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()
  • 相关阅读:
    jdbc配置Spring
    zend studio报错
    phpStudy 5.5n +zendstudio12.5+xDebugger的配置
    一个关于finally和return的面试题
    进制详解
    设计模式--桥接(Bridge)模式
    Struts2中文件上传下载实例
    java int and Integer
    java面试题
    Python __slots__的使用
  • 原文地址:https://www.cnblogs.com/god-for-speed/p/11719027.html
Copyright © 2011-2022 走看看