python subprocess使用,python2 subprocess
内容1。子流程介绍:2。子流程介绍。Popen类1,Popen类2的介绍,Popen类3的构造器,subprocess.Popen的例子。
一、子流程介绍:
子流程模块允许您启动一个新流程来运行子程序,连接输入/输出/错误状态管道,并获取子流程的返回结果。子流程使用的高级函数方法有很多,但都是基于子流程实现的。Popen类,所以本文重点介绍子进程的一些用法。Popen类。
二。子流程。Popen类1。Popen类介绍。子进程模块底层的进程创建和管理由Popen类处理,主要用于在一个新的进程中执行一个子程序。
2.详细讲解Popen类的构造函数。搬家:https://docs.python.org/zh-cn/3.9/library/subprocess.html
def __init__(self,args,bufsize=-1,executable=None,stdin=None,stdout=None,stderr=None,preexec_fn=None,close_fds=True,shell=False,cwd=None,env=None,universal_newlines=None,startupinfo=None,creationflags=0,restore_signals=True,start_new_session=False,pass_fds=(),*,encoding=None,errors=None,text=None):参数说明:
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,子进程的环境变量将从父进程继承。If env!=None,其值必须是映射对象。
Universal_newlines:如果这个参数为True,那么这个file对象的stdin、stdout、stderr将作为文本流打开,否则将作为二进制流打开。
Startupinfo和creationflags:这两个参数只在Windows下有效,它们会被传递给底层的CreateProcess()函数,用来设置子进程的一些属性,比如主窗口的外观、进程优先级等。
3.子流程示例示例一 stdout 正确输出:。打开进程文件指针
导入子进程#显示任务列表以执行命令,该命令用于列出所有任务sub=subprocess.popen (tasklist ,shell=true,stdout=subprocess.pipe) #将正确的内容输出到新管道print (show one,Stdout usage )print(sub . Stdout . read()。解码( gbk )#正确输出示例二、stderr错误输出
#演示2,执行错误的命令,演示stderr输出sub2=subprocess.popen (sssss ,shell=true,# ssss是错误的命令行stderr=subprocess。管道,#将错误的内容输出到新管道stdout=subprocess。PIPE #输出正确)print(演示2,stderr的用法)print (sub2.stderr.read()。decode( gbk )#通过stderr结果:输出不正确的内容。
“sssss”不是内部或外部命令,也不是可运行的程序或批处理文件。 示例三:sudin程序标准输入
# 演示三,演示标准输入设备输入# tasklistfindstr chrome的意思是找出运行中的铬程序# 其运行逻辑是先通过任务列表找到所有任务列表,将找到的任务列表通过传递给findstr chrome .是通道传递的作用sub1=子流程Popen(tasklistfindstr chrome ,shell=True,stdout=subprocess .管道)#基于任务列表findstr chrome的运行逻辑,可以分为两部分sub2=子进程Popen(tasklist ,shell=True,stdout=。子进程。管道)#找到所有任务列表sub3=子流程Popen(findstr chrome ,shell=True,stdin=sub2.stdout,#将sub2的找到的所有任务列表当成sub3_1的输入内容标准输出=子进程。管道)打印(演示三,标准输入的用法)print(sub3.stdout.read().解码( gbk))结果:
演示三,标准输入的用法chrome.exe 6360控制台1 202 664 Kchrome.exe 2924控制台16412 Kchrome.exe 2144控制台18128 Kchrome.exe 3816控制台1 382 300 Kchrome.exe 8612控制台1 39 156 Kchrome.exe 9484控制台1 14 552 Kchrome.exe 10336控制台1 86 288 Kchrome.exe 3740控制台185820 Kchrome.exe 12224控制台1 77 900K