Sh – إدارة أوامر shell في بايثون

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

ما هي مكتبة Sh

في العديد من مشاريع بايثون، تحتاج إلى استدعاء أوامر shell: إدارة الملفات، تشغيل عمليات النظام، التفاعل مع أدوات CLI المثبتة. يمكنك استخدام os.system أو subprocess، لكنها معقدة وتتطلب معالجة يدوية للوسائط والأخطاء والمخرجات.

توفر مكتبة Sh طريقة نظيفة ومكتوبة بأسلوب بايثون لاستدعاء أوامر shell كدوال بايثون عادية. إنها تبسط بشكل كبير دمج الأدوات الخارجية، وتجعل الكود قابلاً للقراءة وسهل التصحيح.

مزايا استخدام Sh

تتمتع مكتبة Sh بالعديد من المزايا الهامة مقارنة بالطرق القياسية لتنفيذ أوامر النظام:

سهولة القراءة وبساطة التركيب - تبدو الأوامر كدوال بايثون عادية، مما يجعل الكود أكثر وضوحاً وقابلية للصيانة.

إدارة تلقائية للأخطاء - تتعامل المكتبة تلقائياً مع رموز الإرجاع وتطرح استثناءات عند حدوث أخطاء.

الأمان - حماية من حقن الأوامر بفضل الهروب الصحيح للوسائط.

المرونة - دعم الأنابيب (pipelines)، التنفيذ في الخلفية، الإدخال/الإخراج المتدفق، والعديد من الإمكانيات الأخرى.

التثبيت والاستيراد

يتم تثبيت المكتبة عبر pip:

pip install sh

لاستيرادها في الكود، يكفي سطر واحد:

import sh

مبادئ العمل الأساسية

تقوم Sh تلقائياً بتعيين اسم أي أمر shell إلى دالة بايثون. هذا يسمح باستخدامها بطريقة طبيعية:

print(sh.ls("-l"))

كل استدعاء يُرجع كائنًا يحتوي على stdout، والذي يمكن تحويله إلى نص، قائمة نصوص، بايتات، وصيغ أخرى.

الاستخدام الأساسي

التعامل مع الملفات

# عرض قائمة الملفات
print(sh.ls("-lah"))

# إنشاء ملف
sh.touch("file.txt")

# نسخ ملف
sh.cp("file.txt", "copy.txt")

# حذف ملف
sh.rm("copy.txt")

# إنشاء مجلد
sh.mkdir("test_dir")

# نقل ملف
sh.mv("file.txt", "test_dir/")

التعامل مع النصوص

# عرض محتوى ملف
content = sh.cat("file.txt")
print(str(content))

# البحث في الملفات
matches = sh.grep("python", "*.py")
for match in matches:
    print(match.strip())

# عد الأسطر
line_count = sh.wc("-l", "file.txt")
print(f"عدد الأسطر: {line_count.strip()}")

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

تدعم Sh طرقاً مختلفة لتمرير وسائط الأوامر:

الوسائط الموضعية

sh.ls("--color", "auto", "/home/user")

الوسائط المسماة

# الخيارات الطويلة
sh.ls(color="auto", all=True, human_readable=True)

# الخيارات القصيرة
sh.ls(a=True, l=True, h=True)

النهج المدمج

# استخدام مختلط
sh.find("/home", name="*.py", type="f")

معالجة مخرجات الأوامر

الحصول على النتيجة كنص

output = sh.ls()
print(str(output))

المعالجة سطراً سطراً

for line in output:
    print(line.strip())

التعامل مع البايتات

raw_output = sh.ls()
bytes_data = raw_output.stdout

تقسيم إلى قائمة نصوص

lines = str(sh.ls()).split('\n')
for line in lines:
    if line.strip():
        print(line)

إدارة الأخطاء

توفر مكتبة Sh آليات قوية لمعالجة الأخطاء:

المعالجة الأساسية للأخطاء

توصيات