【python中调用shell命令使用PIPE】使用PIPE作为stdout出现假卡死的情况——将stdout重定向为输出到临时文件

在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()

 

posted on 2017-11-21 19:40  可可_小虾米  阅读(3038)  评论(0编辑  收藏  举报

导航