# 允许你去创建一个新的子进程让其执行另外的程序,并与它进行通信,获取标准的输入,标准输出,标准错误以及返回码等
import subproecss
subprocess.run(['df', '-h'], shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
stdin,stdout,stderr:分别表示程序的标准输入、标准输出、标准错误。有效的值可以是PIPE,存在的文件描述符,存在的文件对象或None,如果为None需从父进程继承过来,stdout可以是PIPE,表示对子进程创建一个管道,stderr可以是STDOUT,表示标准错误数据应该从应用程序中捕获并作为标准输出流stdout的文件句柄。
subprocess.check_output() #返回的是子程序的执行结果,返回unicode,需要用decode解码,执行错误报CalledProcessError异常错误。
subprocess.check_call() # 命令执行成功返回0,否则抛出subprocess.CalledProcessError异常
subprocess.call(args ,*, stdin=None , stdout=None, stderr=None, shell=False) # 命令执行成功返回0,否则返回非0
shell:表示使用linux shell,默认shell为False,正常情况下传递的命令是字符串列表,如果使用了shell=True,那么传递的命令为字符串,python会首先运行一个shell,再用这个shell来解释整个字符串
subprocess.Popen # Popen对象创建后,子进程便会运行,Popen类提供了若干方法来控制子进程的运行
- wait # 等待子进程结束
- poll # 检查子进程状态
- kill # 给子进程发送SIGKILL信号终止子进程
- send_signal # 向子进程发送信号
- terminate # 给子进程发送SIGTERM信号终止子进程
- communicate # 与子进程交互
# 示例
def execute_cmd(cmd):
p = subprocess.Popen(cmd, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
stdout, stderr = p.communicate()
if p.returncode != 0:
return p.returncode, stderr
return p.returncode, stdout