التقاط المخرجات
اقرأ 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 يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.