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