Python調用subprocess.Popen卡死的解決方案

轉載自:https://www.cnblogs.com/keke-xiaoxiami/p/7875009.htmlhtml

在Python中,調用:subprocess.Popen(cmd, stdout = PIPE, stderr = PIPE, shell= true)的時候,若是調用的shell命令自己在執行以後會忽然出現不少輸出,則這個時候可能會致使hang在那裏,表現就是卡死了,程序也不往下走,也不會報錯。。。python

緣由就是: PIPE自己可容納的量比較小,因此程序會卡死,因此一大堆內容輸出過來的時候,會致使PIPE不足夠處理這些內容,所以須要將輸出內容定位到其餘地方,例如臨時文件等,shell

因此.須要將subprocess.Popen()的內容重定向到文件才能夠,具體提到了這塊的網址內容有下:.net

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

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

其中有一段是說要這樣處理: ——————————————————————————————》htm

解決方法是不用subprocess提供的PIPE,而是使用本身建立的流。如此,能夠控制流的大小。很少說,直接 上代碼:blog

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()
相關文章
相關標籤/搜索