前言:subporcess这个概念其实可以理解为新创建一个进程(电脑再开一个终端程序), 去进行输入输出的操作。
一、Popen方法
sp = subprocess.Popen(cmd,stdin=subprocess.PIPE, stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=True,bufsize=1, universal_newlines=True)
sp.stdin.write("xxx\n".encode("utf-8"))
sp.stdin.flush()
理解常用功能传参含义,上面代码所有操作在管道进行。
Popen在进行一些操作时容易卡死(阻塞),如在检查设备日志情况会一直打印,我们需判断打印日志种出现XXX字符串退出:
方法一:线程执行Popen相应方法 + while True: if sp.poll != 0:该方法还未完成去打印stdout.readline判断 + 计时器 + kill/terminate sp.pid
二、run和getoutput方法
直接获取结果#str
subprocess.run(cmd,timeout=10,encoding='utf-8',shell=True).stdout
subprocess.getoutput()