[python基础] python与s

发布时间:2019-09-20 07:27:16编辑:auto阅读(1780)

    目录:

    一、概述
    二、os包
    三、subprocess包
    四、对比
    五、参考文章


    一、概述

    python与shell交互的方式有一下几种:
    os.system()
    os.popen()
    commands包
    subprocess包

    二、os包

    1. os.system([cmd])
      1. 执行CMD,返回CMD的状态码(0 - 成功,其他 - 失败或被中断)
      2. 无管道
    2. os.popen([CMD], [mode = 'r' | 'w' ], buffersize)
      1. 开启子shell执行CMD,返回执行命令的输入流输出流文件对象。文件对象可读写,但只能进行读或写
      2. 底层通过os管道技术 实现
      3. 单向管道(只能读或写)
        import os
        #使用读通道
        f = os.popen("ls -l")# 执行此语句后,将创建子shell运行参数中指定的命令,但是不阻塞父进程
        f.read()# 执行读取操作时,将阻塞父进程
        #使用写管道
        #需要提前写好echo文件
        '''
        #echo.py
        while True:
        in = input()
        if in == "quit" or in == "exit":
        print("Bye")
        break
        print("[-] ", in)
        '''
        f = os.popen("python echo.py", "w")
        f.write("hello")

    二、subprocess包

    1. subprocess 模块通过os 底层的 管道技术 实现
    2. 模块提出的目标是替代:os.systemos.spawn*
    3. 函数
      1. call(*popenargs, timeout= None, **kwargs)

        1. 功能:调用子进程运行命令
        2. 返回值:0 或 非0值
        3. 阻塞父进程,直到该函数结束
        4. 结束条件:命令执行完成或超时
        5. 用于代替 os.system()
        6. 不支持管道
      2. check_call(*popenargs, **kwargs)

        1. 功能:检查在子进程中运行命令的执行情况
        2. 返回值:0。(命令退出码为0时,返回0;否则,无返回值,直接引发CalledProcessError异常)
        3. 阻塞父进程,直到该函数结束
        4. 结束条件: 命令执行完成超时
        5. 不支持管道
      3. check_output(*popenargs, timeout=None, **kwargs)
        1. 功能: 检查在子进程中运行命令
        2. 返回值: 程序的运行结果。(如果命令返回码为0,返回运行结果;否则,直接抛出CalledProcessError异常)
        3. 不阻塞父进程
        4. 不支持stdout的管道
        5. 指定参数:stderr = STDOUT 可捕获错误信息
        6. 支持参数:input
      4. getoutput(cmd)

        1. 功能: 获取子进程中执行命令的输出结果
        2. 返回值:执行命令的结果
        3. 不阻塞父进程
        4. 不支持管道
        5. 命令执行错误时,不引发异常
      5. getstatusoutput(cmd)

        1. 功能:获取子进程中执行命令的返回码和结果
        2. 返回值:(retcode, stdout)元组
        3. 不阻塞父进程
        4. 不支持管道
        5. 命令执行错误时,不引发异常
      6. run(args, *, stdin = None, input = None, stderr = None, shell = False, cwd = None, timeout = None, check = False, encoding = None, errors = None)
        1. 功能:开启子进程运行命令
        2. 不阻塞父进程
        3. 支持双向管道
        4. 参数check为True时,可能会引发异常
        5. run函数是对Popen类封装后形成的简单函数

关键字