最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python 從subprocess運行的子進程中實時獲取輸出的例子

 更新時間:2019年08月14日 13:37:31   作者:tinyid  
今天小編就為大家分享一篇Python 從subprocess運行的子進程中實時獲取輸出的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

有些時候,我們需要將某些程序放到子進程中去運行,以達到整合系統(tǒng)的目的。在Python中,一個非常好的選擇就是使用subprocess模塊,本模塊為開辟子進程去執(zhí)行子程序提供了統(tǒng)一的接口,更加便于學習和使用。

同時,對于在子進程里的程序,我們希望能夠?qū)崟r獲取其輸出,以在主進程中打印相關(guān)信息,使我們能夠了解當前子程序的執(zhí)行進度。對此,subprocess模塊也提供了相應(yīng)的參數(shù),能夠?qū)⒆映绦虻臉藴瘦敵龊蜆藴叔e誤輸出返回給主程序。

下面,我們就通過一個例子來說明這個功能。首先,我們需要一個用于模擬標準輸出和標準錯誤輸出的“子程序”——subprogram.py:

import sys
import time
 
 
for i in range(5):
  sys.stdout.write('Processing {}\n'.format(i))
  time.sleep(1)
 
for i in range(5):
  sys.stderr.write('Error {}\n'.format(i))
  time.sleep(1)

可以看到這個程序非常簡單,分別向標準輸出和標準錯誤寫入了5條信息,并且輸出之間有1秒的間隔。下面是驅(qū)動這個“子程序”運行的“主程序”——main.py:

import shlex
import subprocess
 
if __name__ == '__main__':
  shell_cmd = 'python3 subprogram.py'
  cmd = shlex.split(shell_cmd)
  p = subprocess.Popen(cmd, shell=False, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
  while p.poll() is None:
    line = p.stdout.readline()
    line = line.strip()
    if line:
      print('Subprogram output: [{}]'.format(line))
  if p.returncode == 0:
    print('Subprogram success')
  else:
    print('Subprogram failed')

可以看到,我們通過指定stderr=subprocess.STDOUT,將子程序的標準錯誤輸出重定向到了標準輸出,以使我們可以直接從標準輸出中同時獲取標準輸出和標準錯誤的信息。運行這個程序,我們會期待main.py會每秒輸出一次信息到控制臺,但是事實上,我們直到等了10秒之后才一次性看到所有的10條輸出。

產(chǎn)生這種現(xiàn)象的原因也非常簡單,就是標準輸出和標準錯誤有一個緩存的概念,它不會立即將程序的標準輸出內(nèi)容返回,而是會做一定的緩存,直到緩存滿或者程序結(jié)束強制清空緩存時才輸出。了解到問題的原因,解決問題的方法也就一目了然了,我們只需要在子程序中,每次輸出后去手動清空一下緩存即可,以下是修改過的subprogram.py:

import sys
import time
 
 
for i in range(5):
  sys.stdout.write('Processing {}\n'.format(i))
  sys.stdout.flush()
  time.sleep(1)
 
for i in range(5):
  sys.stderr.write('Error {}\n'.format(i))
  sys.stderr.flush()
  time.sleep(1)

經(jīng)過上述的修改之后,再次運行main.py程序,我們會看到,每秒會輸出一條信息,達到了我們在主程序中,去追蹤子程序執(zhí)行過程的目的。

PS:測試環(huán)境是Python3.6.1 Mac版。

以上這篇Python 從subprocess運行的子進程中實時獲取輸出的例子就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python之np.where()如何替換缺失值

    Python之np.where()如何替換缺失值

    這篇文章主要介紹了Python中的np.where()如何替換缺失值問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • Python可視化Matplotlib折線圖plot用法詳解

    Python可視化Matplotlib折線圖plot用法詳解

    這篇文章主要為大家介紹了Python可視化中Matplotlib折線圖plot用法的詳解,有需要的朋友可以借鑒參考下,希望可以有所幫助,祝大家多多進步
    2021-09-09
  • python+opencv圖像分割實現(xiàn)分割不規(guī)則ROI區(qū)域方法匯總

    python+opencv圖像分割實現(xiàn)分割不規(guī)則ROI區(qū)域方法匯總

    這篇文章主要介紹了python+opencv圖像分割實現(xiàn)分割不規(guī)則ROI區(qū)域方法匯總,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04
  • Python用正則表達式實現(xiàn)爬取古詩文網(wǎng)站信息

    Python用正則表達式實現(xiàn)爬取古詩文網(wǎng)站信息

    這篇文章主要給大家介紹了關(guān)于Python如何利用正則表達式爬取爬取古詩文網(wǎng)站信息,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-12-12
  • python通過實例講解反射機制

    python通過實例講解反射機制

    這篇文章主要介紹了python通過實例講解反射機制,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-10-10
  • Python利用pdfplumber實現(xiàn)讀取PDF寫入Excel

    Python利用pdfplumber實現(xiàn)讀取PDF寫入Excel

    pdfplumber專注PDF內(nèi)容提取,例如文本(位置、字體及顏色等)和形狀(矩形、直線、曲線),還有解析表格的功能。本文主要為大家介紹如何利用pdfplumber實現(xiàn)讀取PDF寫入Excel,需要的可以參考一下
    2022-06-06
  • 從多個tfrecord文件中無限讀取文件的例子

    從多個tfrecord文件中無限讀取文件的例子

    今天小編就為大家分享一篇從多個tfrecord文件中無限讀取文件的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • 解決win64 Python下安裝PIL出錯問題(圖解)

    解決win64 Python下安裝PIL出錯問題(圖解)

    這篇文章主要介紹了解決win64 Python下安裝PIL出錯問題,文中的解決方法也很簡單,需要的朋友參考下吧
    2018-09-09
  • 一文帶你理解Python中面向?qū)ο缶幊蘋OP的概念

    一文帶你理解Python中面向?qū)ο缶幊蘋OP的概念

    在Python中,面向?qū)ο缶幊蹋∣OP)是一種在編程中使用對象和類的編程范式,它旨在實現(xiàn)現(xiàn)實世界的實體,下面我們就一起來看看它的相關(guān)知識吧
    2023-08-08
  • 詳解python中的time和datetime的常用方法

    詳解python中的time和datetime的常用方法

    Python time time() 返回當前時間的時間戳(1970紀元后經(jīng)過的浮點秒數(shù))。這篇文章主要介紹了python之time和datetime的常用方法 ,需要的朋友可以參考下
    2019-07-07

最新評論

铜山县| 金秀| 沾益县| 防城港市| 温宿县| 阿克| 沂南县| 若尔盖县| 大新县| 罗定市| 汶上县| 静海县| 白河县| 宁都县| 西吉县| 偃师市| 马公市| 郸城县| 尖扎县| 历史| 兴安县| 凉城县| 临泉县| 恩施市| 赫章县| 泽普县| 高雄市| 于田县| 德令哈市| 富裕县| 彩票| 娱乐| 汉阴县| 年辖:市辖区| 三明市| 彭泽县| 牙克石市| 磐石市| 道孚县| 安福县| 土默特右旗|