التقاط مخرجات البرنامج: ما وراء الحلول الساذجة
في البرمجة النصية لـ 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 الخاصة بك.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3