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

Python 從subprocess運(yùn)行的子進(jìn)程中實(shí)時(shí)獲取輸出的例子

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

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

同時(shí),對(duì)于在子進(jìn)程里的程序,我們希望能夠?qū)崟r(shí)獲取其輸出,以在主進(jìn)程中打印相關(guān)信息,使我們能夠了解當(dāng)前子程序的執(zhí)行進(jìn)度。對(duì)此,subprocess模塊也提供了相應(yīng)的參數(shù),能夠?qū)⒆映绦虻臉?biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤輸出返回給主程序。

下面,我們就通過(guò)一個(gè)例子來(lái)說(shuō)明這個(gè)功能。首先,我們需要一個(gè)用于模擬標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤輸出的“子程序”——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)

可以看到這個(gè)程序非常簡(jiǎn)單,分別向標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤寫(xiě)入了5條信息,并且輸出之間有1秒的間隔。下面是驅(qū)動(dòng)這個(gè)“子程序”運(yùn)行的“主程序”——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')

可以看到,我們通過(guò)指定stderr=subprocess.STDOUT,將子程序的標(biāo)準(zhǔn)錯(cuò)誤輸出重定向到了標(biāo)準(zhǔn)輸出,以使我們可以直接從標(biāo)準(zhǔn)輸出中同時(shí)獲取標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤的信息。運(yùn)行這個(gè)程序,我們會(huì)期待main.py會(huì)每秒輸出一次信息到控制臺(tái),但是事實(shí)上,我們直到等了10秒之后才一次性看到所有的10條輸出。

產(chǎn)生這種現(xiàn)象的原因也非常簡(jiǎn)單,就是標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤有一個(gè)緩存的概念,它不會(huì)立即將程序的標(biāo)準(zhǔn)輸出內(nèi)容返回,而是會(huì)做一定的緩存,直到緩存滿(mǎn)或者程序結(jié)束強(qiáng)制清空緩存時(shí)才輸出。了解到問(wèn)題的原因,解決問(wèn)題的方法也就一目了然了,我們只需要在子程序中,每次輸出后去手動(dòng)清空一下緩存即可,以下是修改過(guò)的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)過(guò)上述的修改之后,再次運(yùn)行main.py程序,我們會(huì)看到,每秒會(huì)輸出一條信息,達(dá)到了我們?cè)谥鞒绦蛑?,去追蹤子程序?zhí)行過(guò)程的目的。

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

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

相關(guān)文章

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

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

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

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

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

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

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

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

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

    python通過(guò)實(shí)例講解反射機(jī)制

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

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

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

    從多個(gè)tfrecord文件中無(wú)限讀取文件的例子

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

    解決win64 Python下安裝PIL出錯(cuò)問(wèn)題(圖解)

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

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

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

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

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

最新評(píng)論

枣阳市| 海阳市| 任丘市| 巨野县| 共和县| 中西区| 绵竹市| 府谷县| 望都县| 木里| 辽阳市| 文水县| 金湖县| 安图县| 丰都县| 丰城市| 泰兴市| 丰台区| 天津市| 墨江| 库尔勒市| 海门市| 扎赉特旗| 澜沧| 丹寨县| 铁岭县| 松滋市| 朔州市| 日照市| 定兴县| 新郑市| 沙坪坝区| 浦东新区| 平乐县| 霍州市| 咸宁市| 房产| 金山区| 成武县| 宁乡县| 横山县|