轉載自: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()