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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM