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.
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.
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!