مقدمة
تعد أتمتة التفاعل مع سطر الأوامر مهمة حيوية في التطوير الحديث وإدارة الأنظمة. من إدارة الخوادم البعيدة إلى اختبار واجهات CLI الشامل، تظهر الحاجة إلى التحكم البرمجي في العمليات التفاعلية باستمرار. الأدوات القياسية في بايثون مثل subprocess غالبًا ما تكون غير كافية عند التعامل مع التطبيقات التي تتطلب إدخالًا تفاعليًا، أو انتظار مطالبات محددة، أو منطق معقد لمعالجة المخرجات.
Pexpect (Python Expect) هي مكتبة متقدمة لأتمتة تطبيقات سطر الأوامر التفاعلية، مبنية على مفهوم الأداة الكلاسيكية Expect. توفر آلية قوية لتشغيل العمليات الفرعية، ومراقبة مخرجاتها، والاستجابة لأنماط نصية محددة، وإرسال الأوامر برمجيًا، مما يحاكي سلوك المستخدم البشري بفعالية.
ما هي مكتبة Pexpect
التاريخ والمفهوم
Pexpect هي تطبيق بايثون لمفهوم تم تجسيده لأول مرة في لغة Tcl عبر أداة Expect التي أنشأها دون ليبس في عام 1990. الفكرة الأساسية هي إنشاء واجهة "ذكية" للتفاعل مع البرامج التفاعلية من خلال محطة زائفة (pty).
الهندسة ومبادئ العمل
تعمل المكتبة بناءً على المبادئ الأساسية التالية:
المحطة الزائفة (PTY): تنشئ Pexpect محطة زائفة تحاكي محطة حقيقية للعملية الفرعية. وهذا يسمح للبرامج بالتصرف كما لو كانت تتفاعل مع مستخدم حقيقي.
التخزين المؤقت والتحليل: يتم تخزين جميع البيانات الواردة من العملية الفرعية مؤقتًا وتحليلها للتحقق من مطابقتها للأنماط المحددة.
النموذج القائم على الأحداث: تعمل المكتبة وفق نموذج قائم على الأحداث، حيث يتم إنشاء الأحداث عند اكتشاف الأنماط المتوقعة في مخرجات البرنامج.
الإمكانيات الرئيسية
- تشغيل والتحكم في العمليات التفاعلية
- دعم التعبيرات العادية لمطابقة الأنماط
- نظام مرن للمهلات الزمنية
- إمكانيات متقدمة لتسجيل السجلات
- معالجة ترميزات مختلفة
- التكامل مع العمليات غير المتزامنة
التثبيت والإعداد
المتطلبات النظامية
تتطلب Pexpect نظامًا متوافقًا مع POSIX (Linux، macOS، Unix). المكتبة لا تدعم Windows بشكل مباشر، ولكن يمكن أن تعمل عبر WSL (Windows Subsystem for Linux).
عملية التثبيت
pip install pexpect
للتثبيت مع التبعيات الإضافية:
pip install pexpect[async]
الاستيراد والإعداد الأساسي
import pexpect
import sys
import signal
أساسيات العمل مع Pexpect
إنشاء وإدارة العمليات
كلاس spawn - أساس المكتبة
كلاس spawn هو العنصر المركزي في Pexpect ويوفر واجهة لإنشاء وإدارة العمليات الفرعية:
child = pexpect.spawn('ssh user@hostname', encoding='utf-8', timeout=30)
المعلمات الرئيسية للمنشئ:
command: الأمر المراد تنفيذهargs: قائمة وسائط الأمرtimeout: المهلة الزمنية العامة بالثوانيencoding: الترميز للعمل مع السلاسل النصيةlogfile: ملف أو دفق لتسجيل السجلاتecho: تشغيل/إيقاف الصدىpreexec_fn: دالة يتم تنفيذها قبل تشغيل العملية
أنماط الانتظار والمطابقة
طريقة expect() واختلافاتها
طريقة expect() هي الأداة الرئيسية لانتظار أنماط محددة في مخرجات العملية الفرعية.