كيفية كتابة سكربت لتشغيل أوامر النظام في Python
تمت الكتابة بواسطة: عبد الحكيم
تارخ آخر تحديث: 19 ديسمبر 2024محتوى المقال
- لماذا نستخدم Python لتشغيل أوامر النظام؟
- مقدمة عن مكتبة subprocess
- تشغيل أوامر بسيطة باستخدام subprocess.run()
- التعامل مع مخرجات الأوامر
- تشغيل الأوامر باستخدام subprocess.Popen
- تشغيل أوامر النظام مع إدارة الأخطاء
- دمج الأوامر المتعددة
- خاتمة
تشغيل أوامر النظام من خلال سكربتات Python هو مهارة مفيدة للمطورين، حيث يمكن استخدامه لأتمتة المهام، تشغيل عمليات النظام، أو حتى إدارة السيرفرات. في هذا المقال، سنتعلم كيفية كتابة سكربت لتشغيل أوامر النظام باستخدام لغة Python، مع التركيز على مكتبة subprocess
القوية.
لماذا نستخدم Python لتشغيل أوامر النظام؟
استخدام Python لتشغيل أوامر النظام يوفر لك واجهة برمجية سهلة وقابلة للتوسيع للتفاعل مع النظام الأساسي. يمكنك من خلال Python تشغيل أوامر بسيطة مثل ls
أو dir
، أو تشغيل عمليات معقدة والتحكم بمخرجاتها.
مقدمة عن مكتبة subprocess
مكتبة subprocess
هي المكتبة الموصى بها في Python لتشغيل أوامر النظام وإنشاء عمليات فرعية. تحل هذه المكتبة محل دوال قديمة مثل os.system()
وتوفر وظائف أكثر قوة ومرونة.
تشغيل أوامر بسيطة باستخدام subprocess.run()
للبدء، يمكنك استخدام subprocess.run()
لتشغيل أمر بسيط. سنقوم بتشغيل أمر يعرض قائمة الملفات في دليل معين:
import subprocess
# تشغيل أمر ls لعرض الملفات في الدليل الحالي
subprocess.run(['ls'])
في المثال أعلاه، نقوم بتشغيل الأمر ls
على الأنظمة التي تستخدم UNIX لعرض قائمة الملفات في الدليل الحالي. إذا كنت تعمل على نظام Windows، يمكنك استخدام dir
بدلاً من ls
:
# تشغيل أمر dir لعرض الملفات في الدليل الحالي على Windows
subprocess.run(['dir'], shell=True)
لاحظ أنه في نظام Windows، نحتاج إلى استخدام المعامل shell=True
لتشغيل الأمر داخل بيئة shell.
التعامل مع مخرجات الأوامر
في بعض الأحيان، قد تحتاج إلى التعامل مع مخرجات الأوامر، مثل قراءة نتائج الأمر أو تسجيلها في ملف. يمكنك استخدام المعامل capture_output=True
لجمع المخرجات:
# تشغيل أمر ls وجمع المخرجات
result = subprocess.run(['ls'], capture_output=True, text=True)
# عرض المخرجات
print(result.stdout)
في هذا المثال، يتم جمع المخرجات من خلال stdout
وعرضها. إذا كان هناك أي خطأ في التنفيذ، يمكنك الوصول إلى الخطأ عبر stderr
.
تشغيل الأوامر باستخدام subprocess.Popen
بالإضافة إلى subprocess.run()
، توفر مكتبة subprocess
دالة Popen
التي تمنحك تحكمًا أكبر عند تشغيل الأوامر. باستخدام Popen
، يمكنك تشغيل الأوامر بشكل غير متزامن، التحكم في الإدخال والإخراج، وأكثر.
تشغيل أمر غير متزامن
لتشغيل أمر غير متزامن، يمكنك استخدام Popen
كالتالي:
from subprocess import Popen
# تشغيل أمر غير متزامن
process = Popen(['sleep', '5'])
# متابعة تنفيذ باقي السكربت
print("الأمر يعمل في الخلفية")
في هذا المثال، يتم تشغيل أمر sleep 5
بشكل غير متزامن، مما يسمح للسكربت بالار في التنفيذ دون انتظار اكتمال الأمر.
التعامل مع الإدخال والإخراج
يمكنك أيضًا استخدام Popen
للتعامل مع الإدخال والإخراج بشكل متزامن. في المثال التالي، سنقوم بإرسال بيانات إلى أمر grep
ثم نقرأ المخرجات:
from subprocess import Popen, PIPE
# تشغيل أمر grep
process = Popen(['grep', 'python'], stdin=PIPE, stdout=PIPE, stderr=PIPE, text=True)
# إرسال البيانات إلى stdin
stdout, stderr = process.communicate("python is great\npython is powerful\njava is also good")
# عرض المخرجات
print(stdout)
في هذا المثال، يتم إرسال نص إلى أمر grep
والذي يبحث عن الأسطر التي تحتوي على كلمة "python" ثم يقوم بعرضها.
تشغيل أوامر النظام مع إدارة الأخطاء
من المهم التعامل مع الأخطاء المحتملة عند تشغيل أوامر النظام. يمكنك استخدام try-except لإدارة الأخطاء والتعامل معها بشكل مناسب.
مثال على إدارة الأخطاء
لنقم بكتابة سكربت يقوم بتشغيل أمر وإدارة الأخطاء الناتجة إذا فشل الأمر:
import subprocess
try:
# محاولة تشغيل أمر غير صحيح
subprocess.run(['non_existent_command'], check=True)
except subprocess.CalledProcessError as e:
# التعامل مع الخطأ
print("حدث خطأ أثناء تنفيذ الأمر:", e)
في هذا المثال، نحاول تشغيل أمر غير موجود، وإذا فشل الأمر، نقوم بالتقاط الخطأ وعرض رسالة توضح المشكلة.
دمج الأوامر المتعددة
في بعض الحالات، قد تحتاج إلى دمج أوامر متعددة معًا (مثل استخدام pipes). يمكنك تحقيق ذلك في Python باستخدام subprocess.Popen
:
مثال على دمج الأوامر باستخدام pipes
لنقم بدمج أوامر ls
و grep
للبحث عن ملفات معينة في الدليل الحالي:
import subprocess
# تشغيل الأمر ls وتمريره إلى grep
p1 = subprocess.Popen(['ls'], stdout=subprocess.PIPE)
p2 = subprocess.Popen(['grep', 'txt'], stdin=p1.stdout, stdout=subprocess.PIPE)
p1.stdout.close()
# الحصول على المخرجات
output, err = p2.communicate()
print(output.decode())
في هذا المثال، نقوم بتشغيل ls
وتمرير مخرجاته إلى grep
للبحث عن الملفات التي تحتوي على الامتداد "txt".
خاتمة
يُعد تشغيل أوامر النظام باستخدام Python مهارة قوية تفتح الباب أمام أتمتة العديد من المهام وتنفيذ عمليات النظام بشكل برمجي. باستخدام مكتبة subprocess
، يمكنك تشغيل أوامر بسيطة ومعقدة، التعامل مع المخرجات والأخطاء، ودمج الأوامر معًا. نأمل أن يكون هذا المقال قد قدم لك فهمًا جيدًا حول كيفية كتابة سكربتات Python لتشغيل أوامر النظام.
طور مهاراتك: مقالات يجب قراءتها في البرمجة
- كيفية استخدام مكتبة pathlib لإدارة الملفات والمسارات في Python
- كيفية إجراء العمليات الحسابية المعقدة باستخدام مكتبة SymPy في Python
- كتابة سكربت لتحليل الروابط باستخدام مكتبة urllib في Python
- كيفية إنشاء تقارير Excel باستخدام مكتبة openpyxl في Python
- كيفية إنشاء تطبيقات سطح المكتب باستخدام PySide في Python
- كيفية استخدام مكتبة PIL لمعالجة الصور في Python
- كيفية بناء نموذج تصنيف باستخدام TensorFlow في Python
- كيفية التعامل مع ملفات XML باستخدام مكتبة xml.etree.ElementTree في Python
- كيفية تنفيذ التوازي باستخدام مكتبة multiprocessing في Python
- كيفية كتابة سكربت للتعامل مع API RESTful باستخدام مكتبة requests في Python