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
  • 相关阅读:
    粤语·简约学习笔记
    Linux的网卡由eth0变成了eth1
    RedHat 更新CentOS Yum源
    Lamp 搭建
    像淘宝、京东这样的大型电商网站服务器构架完全部署方案
    完成静态服务器——Node.js摸石头系列之四
    实现使用Websocket通讯的聊天室——Node.js摸石头系列之六
    Node.js摸石头系列目录
    Aptana studio 3 修改配色方案
    Node.js 的安装和控制台命令——Node.js摸石头系列之一
  • 原文地址:https://www.cnblogs.com/5j421/p/10098140.html
Copyright © 2011-2022 走看看