」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 如何在 Python 中有效捕捉程式輸出:超越基本解決方案

如何在 Python 中有效捕捉程式輸出:超越基本解決方案

發佈於2024-11-08
瀏覽:162

How to Capture Program Output Effectively in Python: Beyond Basic Solutions

捕獲程式輸出:超越樸素的解決方案

捕獲程式輸出:超越樸素的解決方案

# writer.py
import sys

def write():
    sys.stdout.write("foobar")
在Python腳本中,捕獲程式輸出以進行進一步處理是一種常見的需求。雖然幼稚的解決方案看起來很簡單,但它們常常達不到要求。考慮以下寫入標準輸出的腳本:

# writer.py 導入系統 def write(): sys.stdout.write("foobar")
# writer.py
import sys

def write():
    sys.stdout.write("foobar")
嘗試使用以下程式碼擷取輸出失敗:

# mymodule.py 從作家匯入寫入 輸出 = 寫入() print(out.upper())
# writer.py
import sys

def write():
    sys.stdout.write("foobar")
為了有效地捕捉輸出,需要更強大的解決方案。一種方法涉及修改系統的標準輸出流:

import sys 從 cStringIO 導入 StringIO # 將標準輸出重定向到 StringIO 物件 備份= sys.stdout sys.stdout = StringIO() # 執行寫入操作 寫() # 檢索並恢復標準輸出 輸出 = sys.stdout.getvalue() sys.stdout.close() sys.stdout = 備份 # 處理捕獲的輸出 print(out.upper())

Python 3.4 的上下文管理器:

# writer.py
import sys

def write():
    sys.stdout.write("foobar")

Python 3.4 的上下文管理器:

How to Capture Program Output Effectively in Python: Beyond Basic Solutions對於Python 3.4 及更高版本,可以使用contextlib 獲得更簡單、更簡潔的解決方案。 redirect_stdout 上下文管理器:

from contextlib import redirect_stdout 導入io f = io.StringIO() # 使用上下文管理器將 stdout 重新導向到 f 使用redirect_stdout(f): 幫助(戰俘) # 檢索 f 捕獲的輸出 s = f.getvalue()這種優雅的方法簡化了輸出捕獲過程,使其更容易在 Python 腳本中處理。

版本聲明 本文轉載於:1729147521如有侵犯,請洽[email protected]刪除
最新教學 更多>
  • 您能否在 C++ 中實現高效的二分搜尋演算法,將迭代器返回搜尋結果?
    您能否在 C++ 中實現高效的二分搜尋演算法,將迭代器返回搜尋結果?
    在C 中搜尋高效的二分搜尋演算法程式設計師經常尋求實現高效的二分搜尋演算法,以提供對數時間複雜度的優勢。一個常見的要求是演算法傳回一個指向搜尋結果的迭代器,而不是一個指示其存在的簡單布林值。 C 標準庫在 標頭中提供了 std::binary_search,但它只傳回一個布林值。正如提問者所指出的...
    程式設計 發佈於2024-11-08
  • 使用 Javascript 的心形圖案程式碼
    使用 Javascript 的心形圖案程式碼
    程式碼 let heart = ""; let size = 6; // Loop to print upper part of the heart for (let i = size / 2; i <= size; i = 2) { for (let j = 1;...
    程式設計 發佈於2024-11-08
  • 如何將 PHP 資料庫結果數組轉換為 JSON?
    如何將 PHP 資料庫結果數組轉換為 JSON?
    將 PHP 資料庫結果陣列轉換為 JSON您想要在 PHP 中將資料庫查詢的結果陣列轉換為 JSON 格式。以下程式碼從資料庫中檢索一行:$row = mysql_fetch_array($result);要將$row 陣列轉換為JSON 格式以便與jQuery 外掛一起使用,您需要可以利用json...
    程式設計 發佈於2024-11-08
  • 如何在 Chrome DevTools 中輕鬆識別和監控表單元素事件?
    如何在 Chrome DevTools 中輕鬆識別和監控表單元素事件?
    了解元素互動觸發的事件要在可自訂表單元素上正確識別和處理事件,必須了解互動時觸發的特定事件。 Chrome DevTools 提供了一個強大的工具,monitorEvents,來協助完成此過程。 使用monitorEvents()檢查目標元素: 右鍵單擊該元素並選擇“Inspect”或在DevToo...
    程式設計 發佈於2024-11-08
  • 為什麼Go不支持傳統繼承?
    為什麼Go不支持傳統繼承?
    Go中的繼承Go為什麼不支持傳統型別繼承? 傳統型別繼承,即子類別繼承一個或多個父類別的定義,不是 Go 程式語言的功能。 創建者的基本原理在Go 語言中FAQ,語言創建者解釋說,面向對象的程式語言通常強調定義類型之間的關係,這些關係在Go 中可以自動推論。 Go 類型不會明確指定類型關係,而是自動...
    程式設計 發佈於2024-11-08
  • 如何在 Python 中建立虛擬環境
    如何在 Python 中建立虛擬環境
    Python 虛擬環境對於管理依賴關係和避免專案之間的衝突至關重要。本指南將引導您完成在 Python 中建立和啟動虛擬環境的過程。 第 1 步:導航到您的專案目錄 開啟終端並導覽至要設定 Python 虛擬環境的目錄。您可以使用 cd 命令來執行此操作: cd /path/to/...
    程式設計 發佈於2024-11-08
  • 如何在 Go JSON 解組中處理巢狀數組?
    如何在 Go JSON 解組中處理巢狀數組?
    Golang JSON:透過解組處理嵌套數組在Go 中,解組後處理嵌套JSON 數組時,理解錯誤至關重要「類型介面{}不支援索引。」當您嘗試存取儲存在interface{}變數中的JSON陣列中的元素時,會發生此錯誤。 要解決此問題,您需要利用類型斷言將interface{}變數轉換為底層陣列類型。...
    程式設計 發佈於2024-11-08
  • 如何在 Java 中組合路徑
    如何在 Java 中組合路徑
    組合Java 中的路徑C#/.NET 中的System.IO.Path.Combine 方法允許將多個路徑段組合成一個單一、有效的路徑。 Java 提供了實作類似功能的替代方法。 Path Object在 Java 7 及更高版本中,建議使用 java.nio.file.Path 類別進行路徑操作。...
    程式設計 發佈於2024-11-08
  • 有效 JSON 有哪些不同的定義?
    有效 JSON 有哪些不同的定義?
    理解最小有效 JSONJSON 的概念已在各種 RFC 和規範中廣泛討論。 RFC4627 最初將 JSON 定義為序列化物件或陣列。根據此定義,僅 {}(空物件) 和 [](空數組) 符合有效、完整的 JSON 字串的條件。 但是,ECMA-404引入了一項修正案,擴大了有效 JSON 字串的範圍...
    程式設計 發佈於2024-11-08
  • 使用 MapStruct 來映射繼承層次結構
    使用 MapStruct 來映射繼承層次結構
    Intro MapStruct provides a rich set of features for mapping Java types. The technical documentation describes extensively the classes and ann...
    程式設計 發佈於2024-11-08
  • SQLite 參數替換是否會導致 Python 中的綁定錯誤?
    SQLite 參數替換是否會導致 Python 中的綁定錯誤?
    SQLite 參數替換問題在Python 2.5 中使用SQLite3 時,嘗試迭代列表並從中檢索資料時會出現一個常見問題一個資料時會出現一個常見問題一個資料庫.使用建議的「?」作為 SQL 注入預防措施的參數通常會導致有關綁定數量的錯誤。 經過調查,很明顯該錯誤源自於資料庫表的初始建立。建立語句,...
    程式設計 發佈於2024-11-08
  • 可以處理變數的 ID 以存取 Python 中的物件嗎?
    可以處理變數的 ID 以存取 Python 中的物件嗎?
    變數的 ID 可以取消引用嗎? 在 Python 中,id() 函數傳回物件的唯一識別碼。這個標識符可以儲存在變數中,但是這個變數的ID可以解引用嗎? 從學術角度來看,答案是肯定的。 _ctypes 模組提供了一個函數 PyObj_FromPtr(),可以將指標轉換為 Python 物件。使用此函數...
    程式設計 發佈於2024-11-08
  • 為什麼 imagecreatefrompng() 產生黑色背景而不是透明區域?
    為什麼 imagecreatefrompng() 產生黑色背景而不是透明區域?
    imagecreatefrompng() 產生黑色背景而不是透明區域? 在 PHP 中,imagecreatefrompng() 函數通常用於處理 PNG映像。然而,據觀察,使用此函數時,PNG 透明度可能會轉換為純黑色。 要解決此問題,可以在使用imagecreatetruecolor() 建立新...
    程式設計 發佈於2024-11-08
  • Go反射中reflect.Type和reflect.Value的主要差異是什麼?
    Go反射中reflect.Type和reflect.Value的主要差異是什麼?
    Go 中的反射類型和值Go 中的反射允許開發人員在運行時檢查和操作類型和值。了解它們的差異對於有效使用反射至關重要。 反射中的類型與值在反射中,reflect.TypeOf(i) 返回一個reflect.Type 對象,而reflect.ValueOf(i)返回一個reflect.Value obj...
    程式設計 發佈於2024-11-08
  • 如何在 AngularJS 中安全地設定變數的 iframe src 屬性?
    如何在 AngularJS 中安全地設定變數的 iframe src 屬性?
    在AngularJS 中從變數設定iframe src 屬性在AngularJS 中,嘗試從下列位置設定iframe 的src 屬性時可能會遭遇到問題一個變數。為了解決這個問題,這裡有一個逐步指南:1。注入 $sce 服務將 $sce(嚴格上下文轉義)服務注入控制器以處理清理。 function A...
    程式設計 發佈於2024-11-08

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3