0Pricing
Python Academy · درس

التقاط المخرجات

اقرأ stdout وstderr

التقاط المخرجات درس مجاني في Python Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Python Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Python Academy 4 دروس في المجموع.

التقاط stdout

لقراءة ما يطبعه أحد الأوامر، مرّروا capture_output=True. يظهر النص في السمة stdout الخاصة بالنتيجة.

import subprocess

cp = subprocess.run(['echo', 'hello'], capture_output=True)
print(cp.stdout)

البايتات مقابل النص

تكون المخرجات افتراضيًا على شكل بايتات. مرّروا text=True للحصول على سلاسل نصية مفككة الترميز بدلًا منها، وهو ما تحتاجونه عادةً.

import subprocess

cp = subprocess.run(['echo', 'hello'], capture_output=True, text=True)
print(repr(cp.stdout))

إزالة السطر الجديد اللاحق

غالبًا ما تنتهي مخرجات الأوامر بسطر جديد. استخدموا .strip() لتنظيفها قبل استخدام القيمة.

import subprocess

cp = subprocess.run(['echo', 'value'], capture_output=True, text=True)
clean = cp.stdout.strip()
print('[' + clean + ']')

التقاط stderr

تُرسَل الأخطاء عادةً إلى stderr، ويُلتقط هذا التدفق بشكل منفصل. وبذلك تبقى المخرجات العادية ورسائل الخطأ مميّزة.

import subprocess

cp = subprocess.run(['ls', '/no/such/dir'], capture_output=True, text=True)
print('stdout:', repr(cp.stdout))
print('stderr:', cp.stderr.strip())

استخدام المخرجات في الشيفرة

المخرجات الملتقطة ليست سوى سلسلة نصية، لذا يمكنكم تحليلها: تقسيمها إلى أسطر، أو تحويل الأرقام، أو تمريرها إلى بقية برنامجكم.

import subprocess

cp = subprocess.run(['printf', 'a\nb\nc\n'], capture_output=True, text=True)
lines = cp.stdout.splitlines()
print('line count:', len(lines))
print(lines)

إعادة توجيه stderr إلى stdout

لدمج مخرجات الأخطاء مع التدفق العادي، عيّنوا stderr=subprocess.STDOUT. سيظهر كلاهما بعد ذلك في stdout.

import subprocess

cp = subprocess.run(['ls', '/no/such/dir'], stdout=subprocess.PIPE,
                    stderr=subprocess.STDOUT, text=True)
print(cp.stdout.strip())

توفير المدخلات

مرّروا البيانات إلى stdin الخاص بأحد الأوامر باستخدام الوسيط input. نمرّر هنا نصًا إلى cat.

import subprocess

cp = subprocess.run(['cat'], input='piped in\n', capture_output=True, text=True)
print(cp.stdout.strip())

الاختصار check_output

تشغّل subprocess.check_output() أمرًا وتعيد stdout الخاص به مباشرةً، كما ترفع استثناءً عند الفشل. وهي طريقة مختصرة ملائمة لالتقاط المخرجات.

import subprocess

out = subprocess.check_output(['echo', 'quick'], text=True)
print(out.strip())

التخلص من المخرجات

لكتم مخرجات أحد الأوامر، أعيدوا توجيه تدفقاته إلى subprocess.DEVNULL.

import subprocess

cp = subprocess.run(['echo', 'silent'], stdout=subprocess.DEVNULL)
print('return code only:', cp.returncode)

معالجة الأخطاء مع المخرجات

عند استخدام check=True، يظل الاستثناء CalledProcessError المرفوع حاملًا للمخرجين الملتقطين output وstderr لأغراض التشخيص.

import subprocess

try:
    subprocess.run(['ls', '/missing'], capture_output=True, text=True, check=True)
except subprocess.CalledProcessError as e:
    print('failed:', e.returncode)
    print('stderr:', e.stderr.strip())

جمع العناصر معًا

تشغّل الدالة المساعدة المعتادة أمرًا، وتتحقق من نجاحه، ثم تعيد نصًا منظفًا. وهذا يغلّف النمط الشائع.

import subprocess

def capture(cmd):
    cp = subprocess.run(cmd, capture_output=True, text=True, check=True)
    return cp.stdout.strip()

print(capture(['echo', 'final result']))

تحقق سريع

اختبروا مدى فهمكم لالتقاط المخرجات.

مراجعة

لقد تعلّمتم التقاط المخرجات:

  • يؤدي استخدام capture_output=True مع text=True إلى الحصول على stdout وstderr في صورة سلاسل نصية.
  • ادمجوا التدفقات باستخدام stderr=subprocess.STDOUT، واكتموها باستخدام DEVNULL.
  • مرّروا المدخلات عبر input=، إذ إن check_output اختصار مناسب.
  • تحتوي الأخطاء على المخرجات الملتقطة لتسهيل تصحيح الأخطاء.

التالي: قراءة متغيرات البيئة ووحدة os.

الأسئلة الشائعة

هل درس «التقاط المخرجات» مجاني؟

نعم — نص درس «التقاط المخرجات» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Python Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Python Academy 4 دروس في المجموع.

ماذا ستتعلم في «التقاط المخرجات»؟

اقرأ stdout وstderr تتمرن على Python Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Python Academy؟

لا تُشترط خبرة سابقة. Python Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.

كم من الوقت يستغرق درس «التقاط المخرجات»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Python Academy هذا؟

نعم. كل درس في Python Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. تشغيل الأوامر باستخدام subprocess
  2. التقاط المخرجات
  3. البيئة والوحدة os
  4. shutil لعمليات الملفات
← العودة إلى Python Academy