zoukankan      html  css  js  c++  java
  • 关于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。
    注意:读到的数据会被缓存在内存里,所以数据量非常大的时候要小心了。
  • 相关阅读:
    codeforces_346A Alice and Bob(数学)
    POJ_2533 Frogger 最小瓶颈路
    hdu1205_吃糖果
    POJ_2503 Babelfish 字典树
    在PC上登录多个微信账号
    查看百度云用户的分享文件
    QQ邮箱收不到ins发的验证码
    试用Fakeapp
    为什么使用网易邮箱
    插入央视网站视频
  • 原文地址:https://www.cnblogs.com/GODYCA/p/3117087.html
Copyright © 2011-2022 走看看