Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Menangkap Output daripada Skrip Python Menggunakan Manipulasi I/O?

Bagaimana untuk Menangkap Output daripada Skrip Python Menggunakan Manipulasi I/O?

Susan Sarandon
Susan Sarandonasal
2024-10-17 14:49:29720semak imbas

How to Capture Output from a Python Script Using I/O Manipulation?

Merakam Output daripada Skrip

Andaikan anda mempunyai skrip yang melaksanakan operasi tulis menggunakan sys.stdout. Penyelesaian awal untuk menangkap output dan menyimpannya dalam pembolehubah untuk pemprosesan selanjutnya mungkin:

<code class="python"># writer.py
import sys

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

# mymodule.py
from writer import write

out = write()
print(out.upper())</code>

Walau bagaimanapun, pendekatan ini gagal menangkap output.

Satu penyelesaian yang mungkin adalah mengubah suai skrip seperti berikut:

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

# setup the environment
backup = sys.stdout

# ####
sys.stdout = StringIO()     # capture output
write()
out = sys.stdout.getvalue() # release output
# ####

sys.stdout.close()  # close the stream 
sys.stdout = backup # restore original stdout

print(out.upper())   # post processing</code>

Pendekatan ini menggunakan penimbal untuk menangkap aliran output.

Bermula dengan Python 3.4, terdapat cara yang lebih ringkas untuk menangkap output menggunakan contextlib.redirect_stdout pengurus konteks:

<code class="python">from contextlib import redirect_stdout
import io

f = io.StringIO()
with redirect_stdout(f):
    help(pow)
s = f.getvalue()</code>

Penyelesaian ini lebih mudah dan menghapuskan keperluan untuk mengurus sandaran dan menutup strim secara manual.

Atas ialah kandungan terperinci Bagaimana untuk Menangkap Output daripada Skrip Python Menggunakan Manipulasi I/O?. 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