首頁  >  文章  >  後端開發  >  如何在 Python 中同時將子進程輸出寫入終端機和檔案?

如何在 Python 中同時將子進程輸出寫入終端機和檔案?

Barbara Streisand
Barbara Streisand原創
2024-11-03 22:58:30740瀏覽

How Can I Write Subprocess Output to Both the Terminal and Files Simultaneously in Python?

使用Python 的子進程同時將進程輸出寫入終端和檔案

當使用subprocess.call() 執行多個可執行文件時,最好有輸出顯示在終端機和指定文件中。但是,預設行為僅允許輸出重定向到檔案或終端。

要克服此限制,請考慮直接將 Popen 與 stdout=PIPE 參數結合使用。這將使您能夠從 Popen 物件的 stdout 屬性讀取輸出。

要實現所需的行為,請執行以下步驟:

  • 建立一個tee()函數: 此函數產生一個線程,將輸入從一個文件轉送到多個輸出檔。
  • 實作 teed_call() 函式: 此函式模擬 subprocess.call() 但接受額外的 stdout 和 stderr 檔參數。它使用 tee() 將輸出寫入檔案和終端。

以下是如何使用這些函數的範例:

<code class="python">import sys
from subprocess import Popen, PIPE
from threading import Thread

def tee(infile, *files):
    ...

def teed_call(cmd_args, **kwargs):
    ...

outf, errf = open("out.txt", "wb"), open("err.txt", "wb")
assert not teed_call(["cat", __file__], stdout=None, stderr=errf)
assert not teed_call(["echo", "abc"], stdout=outf, stderr=errf, bufsize=0)
assert teed_call(["gcc", "a b"], close_fds=True, stdout=outf, stderr=errf)</code>

此程式碼有效地將輸出寫入兩個檔案中每個執行的命令同時顯示檔案和終端。

以上是如何在 Python 中同時將子進程輸出寫入終端機和檔案?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn