Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk Menangkap Output stdout untuk Panggilan Fungsi Python?

Bagaimana untuk Menangkap Output stdout untuk Panggilan Fungsi Python?

Patricia Arquette
Patricia Arquetteasal
2024-11-03 13:57:02254semak imbas

How to Capture stdout Output for Python Function Calls?

Menangkap Output Stdout untuk Panggilan Fungsi Python

Apabila menggunakan perpustakaan yang log ke stdout, menangkap output mereka boleh memberikan cerapan tentang tingkah laku mereka. Artikel ini meneroka penyelesaian untuk mencapai tangkapan stdout untuk panggilan fungsi arbitrari dalam Python.

Penyelesaian Pengurus Konteks

Untuk menangkap output stdout dalam blok kod tertentu, pertimbangkan untuk menggunakan pengurus konteks seperti berikut:

<code class="python">from io import StringIO
import sys

class Capturing(list):
    def __enter__(self):
        self._stdout = sys.stdout
        sys.stdout = self._stringio = StringIO()
        return self
    def __exit__(self, *args):
        self.extend(self._stringio.getvalue().splitlines())
        del self._stringio    # free up some memory
        sys.stdout = self._stdout</code>

Untuk menggunakan pengurus konteks ini, hanya bungkus panggilan fungsi:

<code class="python">with Capturing() as output:
    do_something(my_object)</code>

Pembolehubah output kini akan mengandungi senarai baris yang dicetak oleh panggilan fungsi.

Penggunaan Terperinci

Pengurus konteks boleh digunakan beberapa kali dan hasilnya akan digabungkan. Contohnya:

<code class="python">with Capturing() as output:
    print('hello world')

print('displays on screen')

with Capturing(output) as output:  # note the constructor argument
    print('hello world2')

print('done')
print('output:', output)</code>

Ini akan menghasilkan output:

displays on screen                     
done                                   
output: ['hello world', 'hello world2']

Dalam Python 3.4 dan ke atas, contextlib.redirect_stdout() menyediakan pendekatan alternatif untuk mengubah hala stdout. Walau bagaimanapun, pengurus konteks Menangkap menawarkan kelebihan sebagai pengurus senarai dan juga pengurus konteks.

Atas ialah kandungan terperinci Bagaimana untuk Menangkap Output stdout untuk Panggilan Fungsi Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn