"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيفية التقاط مخرجات البرنامج بشكل فعال في بيثون: ما وراء الحلول الأساسية

كيفية التقاط مخرجات البرنامج بشكل فعال في بيثون: ما وراء الحلول الأساسية

تم النشر بتاريخ 2024-11-08
تصفح:537

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

التقاط مخرجات البرنامج: ما وراء الحلول الساذجة

في البرمجة النصية لـ Python، يعد التقاط مخرجات البرنامج لمزيد من المعالجة حاجة شائعة. ورغم أن الحلول الساذجة قد تبدو واضحة ومباشرة، فإنها غالبا ما تكون قاصرة. خذ بعين الاعتبار البرنامج النصي التالي الذي يكتب إلى stdout:

# writer.py
import sys

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

فشلت محاولة التقاط الإخراج باستخدام الكود التالي:

# mymodule.py
from writer import write

out = write()
print(out.upper())

لتسجيل المخرجات بشكل فعال، يلزم وجود حل أكثر قوة. يتضمن أحد الأساليب تعديل دفق النظام القياسي:

import sys
from cStringIO import StringIO

# Redirect stdout to a StringIO object
backup = sys.stdout
sys.stdout = StringIO()

# Perform the write operation
write()

# Retrieve and restore stdout
out = sys.stdout.getvalue()
sys.stdout.close()
sys.stdout = backup

# Process the captured output
print(out.upper())

مدير السياق لـ Python 3.4:

بالنسبة لـ Python 3.4 والإصدارات الأحدث، يتوفر حل أبسط وأكثر إيجازًا باستخدام contextlib. مدير سياق redirect_stdout:

from contextlib import redirect_stdout
import io

f = io.StringIO()
# Redirect stdout to f using the context manager
with redirect_stdout(f):
    help(pow)

# Retrieve captured output from f
s = f.getvalue()

يعمل هذا الأسلوب الأنيق على تبسيط عملية التقاط المخرجات، مما يسهل التعامل معها في نصوص Python الخاصة بك.

بيان الافراج أعيد طبع هذه المقالة على: 1729147521 إذا كان هناك أي انتهاك، يرجى الاتصال بـ [email protected] لحذفه
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3