首页 > 编程语言 >python-标准库subprocess模块的使用

python-标准库subprocess模块的使用

时间:2023-01-13 10:12:14浏览次数:43  
标签:shell 模块 stdout python subprocess 命令 result stderr

python-标准库subprocess模块

1. python-标准库subprocess

​ subprocess库用于执行Shell命令,工作时会fork一个子进程去执行任务,连接到子进程的标准输入、输出、错误,并获得它们的返回代码。
​ 这个模块将取代os.system、os.spawn、os.popen、popen2.和commands.

  • subprocess的主要方法:

    subprocess.run(),subprocess.Popen(),subprocess.call
    
  • subprocess语法格式

    subprocess.run(args, *, stdin=None, stdout=None, stderr=None, shell=False, cwd=None, timeout=None, check=False, encoding=None)
    
  • subprocess参数使用

    参数 说明
    args 要执行的shell命令,默认是一个字符串序列,如['ls', '-al']或('ls', '-al');也可是一个字符串,如'ls -al',同时需要设置shell=True。
    stdin
    stdout
    stderr
    run()函数默认不会捕获命令运行结果的正常输出和错误输出,可以设置stdout=PIPE, stderr=PIPE来从子进程中捕获相应的内容;也可以设置stderr=STDOUT,使标准错误通过标准输出流输出。
    shell 如果shell为True,那么指定的命令将通过shell执行。
    cwd 改变当前工作目录
    timeout 设置命令超时时间。如果命令执行时间超时,子进程将被杀死,并弹出TimeoutExpired 异常。
    check 如果check参数的值是True,且执行命令的进程以非0状态码退出,则会抛出一个CalledProcessError的异常,且该异常对象会包含参数、退出状态码、以及stdout和stderr(如果它们有被捕获的话)。
    encoding 如果指定了该参数,则stdin、stdout 和stderr 可以接收字符串数据,并以该编码方式编码。否则只接收bytes 类型的数据。
  • 示例

    import subprocess
    cmd = "pwd"
    result = subprocess.run(cmd, shell=True, timeout=3, stderr=subprocess.PIPE, stdout=subprocess.PIPE)
    print(result)
    
    #run方法返回CompletedProcess实例,可以直接从这个实例中获取命令运行结果:
    print(result.returncode) # 获取命令执行返回状态码
    print(result.stdout) # 命令执行标准输出
    print(result.stderr) # 命令执行错误输出
    

2. subprocess 案例

  • 案例1. subprocess基础操作

    #!/usr/bin/env python3
    # _*_ coding: utf-8 _*_
    # Author:shichao
    # File: .py
    
    import subprocess
    cmd = "ls"
    result = subprocess.run(cmd,shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    
    
    # run方法返回CompletedProcess实例,可以直接从这个实例中获取命令运行结果:
    print(result.returncode)    # 获取命令执行返回状态码
    print(result.stdout.decode())         # 命令执行标准输出
    print(result.stderr.decode())         # 命令执行错误输出
    
    

标签:shell,模块,stdout,python,subprocess,命令,result,stderr
From: https://www.cnblogs.com/scajy/p/17048704.html

相关文章