zoukankan      html  css  js  c++  java
  • python中subprocess模块

    subprocess  模块

    subprocess称之为子进程,进程是一个正在进行的程序

    子进程是由另一个正在运行的程序启动的程序,例如QQ聊天点击一个链接,打开了浏览器,那么浏览器称之为QQ的子进程

    为什么要子进程?

    当我们有个一任务需要处理,而自己无法处理,需要其他程序处理

    import os
    ​
    os.system(r'"D:ProgramFiles(x86)TencentQQBinQQScLauncher.exe"')
    res = os.system("dir")
    print(res)
    ​
    #在os模块中,os.system在执行系统指令时,也可以命令操作系统启动某个程序
    ​
    ​
    #os.system和subprocess的区别
    os.system在执行的时候,直接将结果输出到控制台,如果我们要获取了执行结果,就无能为力了
    subprocess不仅可以启动子进程,还能与子进程进行交互
    ​
    ​
    #subprocess的具体用法
    import subprocess
    p = subprocess.Popen('dir', shell=True, stdout=subprocess.PIPE)
    print(p.stdout.read())
    ​
    #上述代码是启动了一个dir的子程序,并将结果输出到指定的管道位置
    dir        表示要执行的命令
    ​
    shell      表示dir是一个命令
    ​
    stdout     指定输出的管道位置
    ​
    #什么是管道?
    #管道类似于生活中的水管,从一端给入介质,在另一端将收到同样的介质。在程序中,数据就相当于介质,管道的作用就是从一个进程中把数据传输到另一个进程
    #本质就是读写同一个文件
    #eg:
    p1 = subprocess.Popen('tasklist', 
                          shell=True,
                          stdout=subprocess.PIPE)
    p2 = subprocess.Popen('findstr  cmd',#要执行的指令  cmd是参数指令
                          shell=True, #第一个参数是否是指令
                          stdin=p1.stdout, #指定输入管道
                          stdout=subprocess.PIPE, #指定输出管道
                          stderr=subprocess.PIPE)  #指定错误管道,当进程出错时,可在错误管道获取结果
    # 读取p2进程的结果
    print(p2.stdout.read())
    print(p2.stderr.read().decode("GBK"))
    #在p1中是启动一个tasklist的子进程,指定输出结果到管道中
    #p2是启动一个findstr的子进程,将p1进程结果作为p2进程输入

     

    1.当需要在python程序中启动子进程时,如果需要数据交互就要用subprocess
    2.当不需要数据交互时,可以使用os.system
  • 相关阅读:
    梯度下降算法 (转)
    机器学习
    杭电1097-A hard puzzle
    动态规划初步习题(紫书)
    4.21考试题解
    【bzoj4445 scoi2015】小凸想跑步
    【bzoj4444 scoi2015】国旗计划
    【bzoj4443 scoi2015】小凸玩矩阵
    【luogu P4007 清华集训2017】小Y和恐怖奴隶主
    【luoguP4006 清华集训2017】小Y和二叉树
  • 原文地址:https://www.cnblogs.com/5j421/p/10098140.html
Copyright © 2011-2022 走看看