• Python调用subprocess.Popen卡死的解决方案


    转载自:https://www.cnblogs.com/keke-xiaoxiami/p/7875009.html

    在Python中,调用:subprocess.Popen(cmd, stdout = PIPE, stderr = PIPE, shell= true)的时候,如果调用的shell命令本身在执行之后会突然出现很多输出,则这个时候可能会导致hang在那里,表现就是卡死了,程序也不往下走,也不会报错。。。

    原因就是: PIPE本身可容纳的量比较小,所以程序会卡死,所以一大堆内容输出过来的时候,会导致PIPE不足够处理这些内容,因此需要将输出内容定位到其他地方,例如临时文件等,

    所以.需要将subprocess.Popen()的内容重定向到文件才可以,具体提到了这块的网址内容有下:

    http://blog.csdn.net/losemyheaven/article/details/48159855

    https://www.topjishu.com/4705.html

    其中有一段是说要这样处理: ——————————————————————————————》

    解决方法是不用subprocess提供的PIPE,而是使用自己创建的流。如此,可以控制流的大小。不多说,直接 上代码:

    import subprocess
    
    import traceback
    
    import tempfile
    
    try:
    
        cmd = "ls -lh"
    
        out_temp = tempfile.SpooledTemporaryFile(bufsize=10*1000)
    
        fileno = out_temp.fileno()
    
        obj = subprocess.Popen(cmd,stdout=fileno,stderr=fileno,shell=True)
    
        obj.wait()
    
        
    
        out_temp.seek(0)
    
        lines = out_temp.readlines()
    
        
    
        
    
        print lines
    
    except Exception, e:
    
        print traceback.format_exc()
    
    finally:
    
        if out_temp:
    
            out_temp.close()
    
     
    

      

  • 相关阅读:
    需求征集系统第四天
    EL表达式和JSTL
    需求征集系统第三天
    [2019.1.6]BZOJ4197 [Noi2015]寿司晚宴
    [2019.1.7]BZOJ1011 [HNOI2008]遥远的行星
    [2019.1.3]BZOJ4326 NOIP2015 运输计划
    [2019.1.2]BZOJ2115 [Wc2011] Xor
    [2019.1.2]BZOJ2460 [BeiJing2011]元素
    [2019.1.1]BZOJ1806 [Ioi2007]Miners 矿工配餐
    [2019.1.1]BZOJ4195 [Noi2015]程序自动分析
  • 原文地址:https://www.cnblogs.com/slqt/p/10362527.html
Copyright © 2020-2023  润新知