0Pricing
Python Academy · درس

تشغيل الأوامر باستخدام subprocess

نفّذ البرامج الخارجية

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

ما هي subprocess؟

تتيح وحدة subprocess لبرنامج Python تشغيل أوامر خارجية وبرامج أخرى، تمامًا كما لو كتبتموها في الطرفية.

import subprocess

result = subprocess.run(['echo', 'hello'])
print('return code:', result.returncode)

أساسيات subprocess.run

تُعد subprocess.run() نقطة الدخول الموصى بها. مرّروا الأمر في صورة قائمة من الوسائط، بحيث يكون اسم البرنامج أولًا، ثم كل وسيط على حدة.

import subprocess

result = subprocess.run(['echo', 'one', 'two'])
print('done with code', result.returncode)

لماذا قائمة وليست سلسلة نصية؟

يؤدي تمرير قائمة إلى تجنب تحليل الصَدَفة للأمر، مما يمنع أخطاء الاقتباس ومخاطر حقن أوامر الصَدَفة. ويمثل كل عنصر وسيطًا واحدًا.

import subprocess

# Safe: each piece is its own argument
subprocess.run(['echo', 'a file with spaces.txt'])

كائن CompletedProcess

تعيد run() كائن CompletedProcess الذي يحتوي على args وreturncode، وعلى المخرجات إذا جرى التقاطها. ويعني رمز الخروج 0 النجاح.

import subprocess

cp = subprocess.run(['true'])
print('args:', cp.args)
print('returncode:', cp.returncode)

التحقق من رموز الخروج

يعني رمز الخروج غير الصفري عادةً أن الأمر فشل. ويمكنكم فحصه يدويًا بعد الاستدعاء.

import subprocess

cp = subprocess.run(['ls', '/no/such/path'])
if cp.returncode != 0:
    print('command failed with', cp.returncode)

رفع استثناء عند الفشل باستخدام check=True

مرّروا check=True لجعل run() يرفع CalledProcessError تلقائيًا عندما ينتهي الأمر برمز خروج غير صفري.

import subprocess

try:
    subprocess.run(['false'], check=True)
except subprocess.CalledProcessError as e:
    print('failed with code', e.returncode)

تمرير الوسائط

إن وسائط الأمر الإضافية ليست سوى عناصر أخرى في القائمة. نعرض هنا محتويات دليل بتنسيق تفصيلي.

import subprocess

subprocess.run(['echo', '-n', 'no newline'])
print()
print('above echo had -n flag')

تعيين مهلة زمنية

استخدموا timeout لإيقاف أمر يستغرق وقتًا طويلًا. فهو يرفع TimeoutExpired.

import subprocess

try:
    subprocess.run(['sleep', '5'], timeout=0.1)
except subprocess.TimeoutExpired:
    print('command took too long, aborted')

دليل العمل

يشغّل الوسيط cwd الأمر في دليل محدد من دون تغيير دليل العمل الخاص ببرنامجكم.

import subprocess

subprocess.run(['pwd'], cwd='/tmp')

الخيار shell=True

عند استخدام shell=True، تمرّرون سلسلة أمر واحدة تفسرها الصَدَفة. يتيح ذلك الأنابيب وأنماط glob، لكنه خطِر مع المدخلات غير الموثوقة. فضّلوا صيغة القائمة.

import subprocess

subprocess.run('echo hello && echo world', shell=True)

تجنب os.system

لا تعيد os.system القديمة سوى رمز خروج، ولا توفر تمريرًا آمنًا للوسائط أو التقاطًا للمخرجات. وتحل subprocess.run محلها في جميع الشيفرات الجديدة.

import subprocess

# Modern, safe approach
cp = subprocess.run(['echo', 'modern way'])
print('exit code:', cp.returncode)

تحقق سريع

اختبروا مدى فهمكم لتشغيل الأوامر.

مراجعة

لقد تعلّمتم تشغيل الأوامر باستخدام subprocess:

  • تشغّل subprocess.run([...]) برنامجًا خارجيًا بأمان.
  • تعيد كائن CompletedProcess الذي يحتوي على returncode.
  • يرفع check=True استثناءً عند الفشل، بينما يوقف timeout الأوامر البطيئة.
  • فضّلوا صيغة القائمة على shell=True.

التالي: التقاط مخرجات الأمر.

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

هل درس «تشغيل الأوامر باستخدام subprocess» مجاني؟

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

ماذا ستتعلم في «تشغيل الأوامر باستخدام subprocess»؟

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

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

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

كم من الوقت يستغرق درس «تشغيل الأوامر باستخدام subprocess»؟

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

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

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

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

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