1.import subprocess 

简单点说,就是通过python来调用模块来执行操作系统的命令。

我们经常需要通过Python去执行一条系统命令或脚本,系统的shell命令是独立于你的python进程之外的,每执行一条命令,就是发起一个新进程。

在python程序中每发起一个命令就会打开打开一个新的窗口,然后把结果返回到你的python程序中。这就是python程序能够调用shell命令的原因。

 

2.

可以直接输入命令,系统会打开新的窗口。进程从标准输入文件中得到输入数据,将正常输出数据输出到标准输出文件,返回结果。



b = subprocess.run(["control"])



 

stderr = subprocess.PIPE  stderr 是标准错误。进程将从标准输入文件中得到输入数据,将正常输出数据输出到标准输出文件,而将错误信息送到标准错误文件中。

stdout = subprocess.PIPE  标准输出      

PIPE  管道  



a = subprocess.run(["cleanmgr"],stderr = subprocess.PIPE,stdout = subprocess.PIPE)



a.renturncode 命令的返回状态。返回结果 不为0得话,会举出错误。

a.args  查看运行的参数,如上面返回的就是cleanmgr。 

 

检查命令返回状态,不是0得话会报错。



a.check_returncode



 

3.每个程序在内存里的数据都是独立的,不能互相访问。

那么python的进程怎么得到输出数据的?

python先接受一个参数,然后执行这个参数带来的命令。PIPE是一个管道,连接python程序和系统文件,文件通过这个桥梁可以间接把文件传输出来。

下面这个程序的PIPE就是操作系统,操作系统打开文件,然后发送到python程序中,从而达到互相访问。

架起来一个桥梁,文件会被copy到操作系统里,不会立即执行。

a.stdout 直接得到传输出来的数据。

后面如果加check = True 如果stderr返回不是0,则直接报错。



a = subprocess.run(["cleanmgr"],stderr = subprocess.PIPE,stdout = subprocess.PIPE)



 

如果想获得文件里的部分文件,则需要在参数里加入管道 |,并且不需要列表,而且后买你要加入一个shell = True。

参数里有关到就不要用列表形式。

后面加shell 是告诉subprocess 不需要再拼参数了,直接把参数发到shell里面。



a = subprocess.run("control,|con,prec",stderr = subprocess.PIPE,stdout = subprocess.PIPE,shell = True)