目次
1. ما هو تنفيذ الأوامر في بايثون؟
بايثون هي لغة برمجة تُستخدم لأتمتة المهام المختلفة، وأحد أهم ميزاتها هو القدرة على تنفيذ أوامر سطر الأوامر من داخل البرنامج. من خلال بايثون، يمكن استدعاء وظائف نظام التشغيل لأتمتة عمليات الملفات أو إدارة النظام. في هذا المقال، سنشرح الطرق الأساسية والمتقدمة لتشغيل الأوامر باستخدام بايثون.2. الطرق الأساسية لتنفيذ الأوامر في بايثون
أبسط الطرق لتنفيذ الأوامر في بايثون هي استخدامos.system()
أو وحدة subprocess
. لكل طريقة مزايا وعيوب، ومن المهم اختيار الطريقة المناسبة حسب الحاجة.2.1 تنفيذ الأوامر باستخدام os.system()
تُعتبر os.system()
طريقة بسيطة لتشغيل الأوامر من برنامج بايثون. على سبيل المثال:import os
os.system('ls')
هذه الطريقة سهلة الاستخدام لكنها لا تسمح بالحصول على ناتج التنفيذ، كما أنها أقل أمانًا، لذلك لا يُنصح باستخدامها كثيرًا. في الوقت الحاضر، يتم الاعتماد غالبًا على وحدة subprocess
لكونها أكثر أمانًا ومرونة.2.2 تنفيذ الأوامر باستخدام subprocess.run()
تُعتبر subprocess.run()
الطريقة الموصى بها لتنفيذ الأوامر في بايثون، حيث تسمح بالحصول على النتائج ومعالجة الأخطاء بشكل أكثر مرونة.import subprocess
subprocess.run(['ls', '-l'])
ينفذ هذا الكود الأمر ls -l
ويعرض النتائج على الشاشة. تعمل subprocess.run()
بشكل متزامن، أي أن البرنامج ينتظر حتى ينتهي التنفيذ قبل الانتقال للخطوة التالية.
3. التنفيذ المتقدم: المعالجة غير المتزامنة والأنابيب
يمكن لوحدةsubprocess
تنفيذ أوامر بشكل غير متزامن أو ربط عدة أوامر عبر الأنابيب، مما يتيح أتمتة أكثر كفاءة.3.1 التنفيذ غير المتزامن باستخدام subprocess.Popen()
المعالجة غير المتزامنة تسمح للبرنامج بالمتابعة دون انتظار انتهاء الأمر. على سبيل المثال:import subprocess
proc = subprocess.Popen(['sleep', '5'])
print("الأمر قيد التنفيذ")
هنا يتم تنفيذ الأمر sleep 5
بشكل غير متزامن مع عرض الرسالة مباشرة.3.2 ربط الأوامر باستخدام الأنابيب
يمكن ربط عدة أوامر معًا. على سبيل المثال لقراءة محتوى ملف وكتابته في ملف آخر:import subprocess
with open('input.txt') as input_file, open('output.txt', 'w') as output_file:
subprocess.run(['cat'], stdin=input_file, stdout=output_file)
يسمح subprocess.run()
بتمرير البيانات بين الأوامر عبر الإدخال والإخراج القياسي.4. معالجة الأخطاء والحصول على المخرجات
من أهم الجوانب عند تنفيذ الأوامر هو التعامل مع الأخطاء والحصول على نتائج التنفيذ.4.1 التقاط المخرجات والأخطاء
يمكن لـsubprocess.run()
التقاط المخرجات والأخطاء. على سبيل المثال:import subprocess
result = subprocess.run(['ls', '-l'], capture_output=True, text=True)
print(result.stdout)
يتم تخزين المخرجات في result.stdout
والأخطاء في result.stderr
.4.2 معالجة الأخطاء باستخدام الاستثناءات
في حال فشل تنفيذ الأمر، يمكن التعامل مع الخطأ باستخدامtry-except
:import subprocess
try:
subprocess.run(['invalid_command'], check=True)
except subprocess.CalledProcessError as e:
print(f"حدث خطأ: {e}")

5. الاختلافات بين Windows و Mac و Linux
قد يختلف تنفيذ الأوامر حسب نظام التشغيل.5.1 تنفيذ الأوامر على Windows
في Windows يتم التنفيذ عبر موجه الأوامر أو PowerShell:import subprocess
subprocess.run(['dir'], shell=True)
من المهم هنا استخدام shell=True
.5.2 تنفيذ الأوامر على أنظمة Unix (Linux و macOS)
في أنظمة Unix يمكن تنفيذ الأوامر مباشرة مثل:import subprocess
subprocess.run(['ls', '-l'])
6. الخلاصة
من خلال بايثون يمكن أتمتة عمليات إدارة الملفات وتشغيل الأوامر بكفاءة. باستخدامsubprocess
يمكن تنفيذ أوامر بسيطة ومعقدة، سواء كانت متزامنة أو غير متزامنة، مع إمكانية التعامل مع الأخطاء.
فهم هذه الأدوات يعزز من كفاءة البرمجة اليومية، ويوفر الوقت والجهد للمطورين.