subprocess意在替代其他几个老的模块或者函数,比如:os.system os.spawn* os.popen* popen2.* commands.*
subprocess最简单的用法就是调用shell命令了,另外也可以调用程序,并且可以通过stdout,stdin和stderr进行交互。
subprocess的Popen方法
首先导入subprocess模块,执行系统命令 subprocess("ping 127.0.0.1"),另外还有几个强大的可选参数,Popen.communicate(input=None):与子进程进行交互。向stdin发送数据,或从stdout和stderr中读取数据。可选参数input指定发送到子进程的参数。Communicate()返回一个元组:(stdoutdata, stderrdata)。注意:如果希望通过进程的stdin向其发送数据,在创建Popen对象的时候,参数stdin必须被设置为PIPE。同样,如果希望从stdout和stderr获取数据,必须将stdout和stderr设置为PIPE。
即设置参数时语句如下:
s=subprocess.Popen("ping 127.0.0.1",stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=True),
默认情况下shell值是false,stdin是读入的命令,输出的结果程序无错时存在stdout中,错误时存在stderr中,可以用communicate以元组返回结果,s.communicate()[0]存放stdout的值,s.communicate()[1]存放stderr的值,一次只能选择一个打印,两个同时打印时默认打印s.communicate()[0]
因此在捕获程序出错的信息可以方便的打印s.communicate()[1],当stderr未设置时返回None