关于python sunprocess调用wait后,一直阻塞的问题

今天在用subprocess去执行问一个python脚本的时候,由于python脚本输出的内容很多,而subprocess的pipe的大小是有限制的,如果pipe的内容过多,将阻塞等待被读取,此时如果我使用wait()等待的话,将一直导致父进程阻塞,

p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)

p.wait()

stdout, stderror = p.communicate()

Popen.wait()
等待子进程结束,设置并返回 returncode 属性。
注意:如果子进程输出了大量数据到stdout或者stderr的管道,并达到了系统 pipe的缓存大小的话,子进程会等待父进程读取管道,而父进程此时正wait着的话,将会产生传说中的死锁,后果是非常严重滴建议使用communicate()来 避免这种情况的发生。
Popen.communicate(input=None)
和子进程交互:发送数据到stdin,并从stdout和stderr读数据,直到收到EOF。等待子进程结束。可选的input如有 有的话,要为字符串类型。
此函数返回一个元组: (stdoutdata, stderrdata) 。
注意,要给子进程的stdin发送数据,则Popen的时候,stdin要为PIPE;同理,要可以收数据的话,stdout或者stderr也要为 PIPE。
注意:读到的数据会被缓存在内存里,所以数据量非常大的时候要小心了。
posted @ 2013-06-04 14:50  GOD_YCA  阅读(3554)  评论(0编辑  收藏  举报