美文网首页
subprocess内置库

subprocess内置库

作者: 非鱼2018 | 来源:发表于2019-11-13 21:48 被阅读0次

    subprocess库可以代替os.system,可以获取执行的子进程的输出

    #coding=utf-8
    import subprocess as sp
    import time
    
    # 1.shell为true表示使用shell执行
    sp.Popen('DIR', shell=True)
    sp.Popen('DIR') #会报错
    sp.Popen('cmd /k dir')
    
    # 2.communicate获取子进程返回信息
    s=sp.Popen('taskkill /F /IM chromedriver.exe',shell=True,stdout=sp.PIPE)
    s=sp.returncode #0表示执行成功
    #print(s.communicate()) #返回元组
    也可以用s=sp.Popen('taskkill /F /IM chromedriver.exe',shell=True,stdout=sp.PIPE).stdout.readlines()获取
    #获取err信息
    s=sp.Popen('taskkill /F /IM chromedriver.exe',shell=True,stdout=sp.PIPE,stderr=sp.PIPE).stderr.readlines()
    print(s.communicate()[0].decode('gbk')) #成功: 已终止进程 "chromedriver.exe",其 PID 为 6316。
    s.wait() #等待子进程返回
    s.poll() #返回状态,没返回为NONE,成功为0
    # 如
    cmd='ping /n 5 127.0.1>nul'
    sp.Popen(cmd,shell=True)
    while True:
        s.wait()
        time.sleep(1)
        if s.poll()==0:
            break
    
    # 3.使用check_output直接获取进程返回值及信息,如不为0则抛出CalledProcessError异常
    try:
        sp.check_output(cmd)
    except sp.CalledProcessError:
        pass
    else:
        print('执行成功')
    
    # 4,第一个参数可以是一个列表
    sp.Popen(['NOTEPAD.EXE','test.txt']) #后面还可以加参数,如启动的参数等等
    
    # 5使用call阻塞
    sp.call(cmd,shell=True)

    相关文章

      网友评论

          本文标题:subprocess内置库

          本文链接:https://www.haomeiwen.com/subject/vkkductx.html