欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

對Python subprocess.Popen子進(jìn)程管道阻塞詳解

 更新時(shí)間:2018年10月29日 08:44:36   作者:獨(dú)一無二的小個(gè)性  
今天小編就為大家分享一篇對Python subprocess.Popen子進(jìn)程管道阻塞詳解,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧

問題產(chǎn)生描述

使用子進(jìn)程處理一個(gè)大的日志文件,并對文件進(jìn)行分析查詢,需要等待子進(jìn)程執(zhí)行的輸出結(jié)果,進(jìn)行下一步處理。

出問題的代碼

# 啟用子進(jìn)程執(zhí)行外部shell命令
def __subprocess(self,cmd):
 try:
 # 執(zhí)行外部shell命令, 輸出結(jié)果輸出管道
 p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) 
 p.wait()

 # 從標(biāo)準(zhǔn)輸出讀出shell命令的輸出結(jié)果
 #rt = p.stdout.read().decode()

 # 以換行符拆分?jǐn)?shù)據(jù),并去掉換行符號(hào)存入列表
 rt_list = rt.strip().split('\n')

 except Exception as e:
 if(DEBUG):
  print(traceback.format_exc())

 return rt_list

問題分析

子進(jìn)程產(chǎn)生一些數(shù)據(jù),他們會(huì)被buffer起來,當(dāng)buffer滿了,會(huì)寫到子進(jìn)程的標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤輸出,這些東西通過管道發(fā)送給父進(jìn)程。當(dāng)管道滿了之后,子進(jìn)程就停止寫入,于是就卡住了,及時(shí)取走管道的輸出就不會(huì)出現(xiàn)阻塞了

但是本人此處采取的是臨時(shí)文件接收子進(jìn)程輸出,由于臨時(shí)文件是建立在磁盤上的,沒有size的限制,并且文件被close后,相應(yīng)的磁盤上的空間也會(huì)被釋放掉。

已改進(jìn)的代碼

import tempfile
# 啟用子進(jìn)程執(zhí)行外部shell命令
def __subprocess(self,cmd):
 try:
 # 得到一個(gè)臨時(shí)文件對象, 調(diào)用close后,此文件從磁盤刪除
 out_temp = tempfile.TemporaryFile(mode='w+')
 # 獲取臨時(shí)文件的文件號(hào)
 fileno = out_temp.fileno()

 # 執(zhí)行外部shell命令, 輸出結(jié)果存入臨時(shí)文件中
 p = subprocess.Popen(cmd, shell=True, stdout=fileno, stderr=fileno) 
 p.wait()

 # 從臨時(shí)文件讀出shell命令的輸出結(jié)果
 out_temp.seek(0)
 rt = out_temp.read()

 # 以換行符拆分?jǐn)?shù)據(jù),并去掉換行符號(hào)存入列表
 rt_list = rt.strip().split('\n')

 except Exception as e:
 if(DEBUG):
  print(traceback.format_exc())

 finally:
 if out_temp:
  out_temp.close()

 return rt_list

以上這篇對Python subprocess.Popen子進(jìn)程管道阻塞詳解就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • python制作花瓣網(wǎng)美女圖片爬蟲

    python制作花瓣網(wǎng)美女圖片爬蟲

    本文通過python 來實(shí)現(xiàn)這樣一個(gè)簡單的爬蟲功能,把我們想要的圖片爬取到本地,需要的朋友可以參考下
    2015-10-10
  • Python實(shí)現(xiàn)一個(gè)服務(wù)器監(jiān)聽多個(gè)客戶端請求

    Python實(shí)現(xiàn)一個(gè)服務(wù)器監(jiān)聽多個(gè)客戶端請求

    這篇文章主要為大家詳細(xì)介紹了Python如何實(shí)現(xiàn)一個(gè)服務(wù)器監(jiān)聽多個(gè)客戶端請求,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • 通過Python OpenGL的point sprite技術(shù)繪制雪花

    通過Python OpenGL的point sprite技術(shù)繪制雪花

    通常,點(diǎn)精靈(point sprite)技術(shù)被用于描述大量粒子在屏幕上的運(yùn)動(dòng),自然也可以用于繪制雪花。本文將通過Python OpenGL繪制雪花,感興趣的可以動(dòng)手試一試
    2022-02-02
  • Python繪制柱狀圖堆疊圖完整代碼

    Python繪制柱狀圖堆疊圖完整代碼

    有個(gè)朋友要求幫忙繪制堆疊柱狀圖,查閱了一些文檔之后也算是完成了,只是一個(gè)小demo,下面我就記錄一下,這篇文章主要給大家介紹了關(guān)于Python繪制柱狀圖堆疊圖的相關(guān)資料,需要的朋友可以參考下
    2023-09-09
  • PyTorch中常用的激活函數(shù)的方法示例

    PyTorch中常用的激活函數(shù)的方法示例

    這篇文章主要介紹了PyTorch中常用的激活函數(shù)的方法示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • python中的annotate函數(shù)使用

    python中的annotate函數(shù)使用

    這篇文章主要介紹了python中的annotate函數(shù)使用方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • Python測試函數(shù)出現(xiàn)AssertionError:None?!=?‘Janis?Joplin‘問題及解決

    Python測試函數(shù)出現(xiàn)AssertionError:None?!=?‘Janis?Joplin‘問題及解決

    這篇文章主要介紹了Python測試函數(shù)出現(xiàn)AssertionError:None?!=?‘Janis?Joplin‘問題及解決方案,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • 淺析PyCharm 的初始設(shè)置(知道)

    淺析PyCharm 的初始設(shè)置(知道)

    這篇文章主要介紹了PyCharm 的初始設(shè)置(知道),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-10-10
  • python requests爬取高德地圖數(shù)據(jù)的實(shí)例

    python requests爬取高德地圖數(shù)據(jù)的實(shí)例

    今天小編就為大家分享一篇python requests爬取高德地圖數(shù)據(jù)的實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-11-11
  • Python編輯器Pycharm安裝配置超詳細(xì)教程

    Python編輯器Pycharm安裝配置超詳細(xì)教程

    PyCharm是一款功能強(qiáng)大的Python編輯器,具有跨平臺(tái)性,下面這篇文章主要給大家介紹了關(guān)于Python編輯器Pycharm安裝配置的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-01-01

最新評(píng)論