python3的subprocess的各个方法的区别(二)
subprocess如何避免死锁
如果交互是双工的,即涉及读取和写入,则尤其如此。这种交互可能导致死锁,因为两个进程都可能最终等待另一个进程的输出
您希望从子进程标准输出管道读取,但标准错误管道的缓冲区已满,操作系统希望您首先读取该缓冲区,然后僵死
subprocess.communicate()
Interact with process: Send data to stdin. Read data from stdout and stderr, until end-of-file is reached. Wait for process to terminate.
p=subprocess.Popen(cmd,shell=True,stdout=subprocess.PIPE)
想要得到stdout 输出 有两种方法:
sout,_=subprocess.communicate()
sout=p.stdout.read()
communicate()是等待 进程结束才返回字符串,如果输出过多不可用。但一般可以使用他,因为
communicate可以防止阻塞。
p.stdout 可以用于for 循环遍历,但要处理的好,缓存问题,防止阻塞