python模块学习:subprocess

python模块学习:subprocess

  1. 说明:
    python2.4版本引入了subprocess模块用来替换os.system()、os.popen()、os.spawn*()等函数以及commands模块
    subprocess是一个功能强大的自进程管理模块,可以像Linux系统中执行shell命令那样fork一个子进程执行外部的命令,subprocess模块允许启动一个新进程,并连接到他们的输入/输出/错误管道,从而获取返回值
    (1)如果使用的是python2.4及以上版本应该使用subprocess模块
    (2)如果使用的是python2.4以上,python3.5以下的版本,官方给出的建议是使用subprocess.call()函数
    (3)python2.5新增了subprocess.check_call()函数,python2.7新增了subprocess.check_output()函数,可按需使用
    (4)如果使用的是python3.5及以上的版本,官方给出的建议是尽量使用subprocess.run()函数
    (5)如果subprocess.call()、subprocess.check_call()、subprocess.check_output()和subprocess.run()这些高级函数无法满足需求,可以使用subprocess.Popen()类来实现

1常用函数

函数描述
subprocess.run()python3.5中新增的函数。执行指定的命令,等待命令执行完成后返回一个包含执行结果的CompleteProcess类
subprocess.call()执行指定的命令,返回命令执行状态,其功能类似于os.system(cmd)
subprocess.check_call()python2.5中新增的函数。执行指定的命令,如果执行成功则返回状态码,否则抛出异常。其功能等价于subprocess.run(…,check=True)
subprocess.check_output()python2.7中新增的函数。执行指定的命令,如果执行状态码为0则返回命令执行结果,否则抛出异常
subprocess.getoutput(cmd)接受字符串格式的命令,执行命令并返回执行结果,其功能类似于os.popen(cmd).read()和commands.getoutput(cmd)
subprocess.getstatusoutput(cmd)执行cmd命令,返回一个元组(命令执行状态,命令执行结果输出),其功能类似于commands.getstatusoutput()

2 各函数的定义及参数说明

函数参数列表

subprocess.run(args,*,stdin=None,input=None,stdout=None,stderr=None,shell=False,timeout=None,check=False,universal_newlines=False)

subprocess.call(args,*,stdin=None,stdout-None,stderr=None,shell=False,timeout=None)

subprocess.check_call(args,*,stdin=None,stdout=None,stderr=None,shell=False,timeout=None)

subprocess.check_output(args,*,stdin=None,stderr=None,shell=False,universal_newlines=False,timeout=None)

subprocess.getstatusoutput(cmd)

subprocess.getoutput(cmd)
在这里插入代码片

参数说明

  • args:要执行的shell命令,可以是字符串,也可以是命令各个参数组成的序列。当该参数的值是一个字符串时,该命令的解释过程是与平台相关的,因此通常建议将args参数作为一个序列传递
  • bufsize:指定缓存策略,0表示不缓冲,1表示行缓冲,其他大于1的数字表示缓冲区大小,负数表示使用系统默认缓冲策略。stdin,stdout,stderr:分别表示程序标准输入、输出、错误句柄
  • preexec_fn:用于指定一个将在子进程运行之前被调用的可执行对象,只有在unix平台下有效
  • close_fds:如果该参数的值为True,则除了0,1和2之外的所有文件描述符都将会在子进程执行之前被关闭
  • shell:该参数用于标识是否使用shell作为要执行的程序,如果shell值为True,则建议将args参数作为一个字符串传递而不要作为一个序列传递
  • cwd:如果该参数值不是None,则该函数将会在执行这个子进程之气那改变当前工作目录
  • env:用于指定子进程的环境变量,如果env=None,那么子进程的环境变量将从父进程中继承;如果哦env!=None,那么它的值必须是一个映射对象
  • universal_newlines:如果该参数值为True,则该文件对象的stdin,stdout和stderr将会作为文本流被打开,否则他们将会被作为二进制流被打开
  • startupinfo和createtionflags:这两个参数只在Windows下有效,它们被传递给底层的CreateProcess()函数,用于设置子进程的一些属性,如主窗口的外观,进程优先级等
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值