استخدام مكتبة argparse في بايثون: الدليل الشامل لإنشاء أدوات CLI متقدمة

1. ما هو argparse؟ أساسيات استخدامه في Python

ما هو argparse؟

argparse هي مكتبة قياسية في Python تُستخدم لمعالجة معاملات سطر الأوامر. تسمح لك باستقبال وتحليل خيارات ووسائط المستخدم عند تشغيل البرنامج، مما يمنحك مرونة كبيرة لتخصيص سلوك التطبيق. على سبيل المثال، يمكنك جعل المستخدم يحدد مسار ملف أو إعدادات اختيارية مباشرة من سطر الأوامر لبناء أدوات CLI فعّالة وسهلة الاستخدام.

import argparse

parser = argparse.ArgumentParser(description="برنامج لمعالجة الملفات")
parser.add_argument("input_file", help="مسار الملف المطلوب معالجته")
args = parser.parse_args()

print(f"الملف الذي سيتم معالجته: {args.input_file}")

في هذا الكود، يستقبل البرنامج مسار الملف الذي يدخله المستخدم عبر سطر الأوامر ويعرضه. باستخدام add_argument تُعرّف الوسيطات، وبـ parse_args() يتم تحليلها بطريقة بسيطة وواضحة.

2. لماذا نستخدم argparse؟ الخيار الأمثل لأدوات CLI

ما هي أدوات CLI؟

أدوات CLI هي برامج تُدار مباشرة من سطر الأوامر، وهي مفيدة جداً لإدارة الأنظمة أو معالجة البيانات أو عمليات الأتمتة. عند بناء أدوات CLI بـ Python، تعتبر argparse أداة قوية لأنها تُبسط استقبال وتحليل الوسائط، وتوفر معالجة تلقائية للأخطاء وتوليد رسائل المساعدة.

مزايا argparse

  • إعداد وسائط مرن: من السهل تعريف الوسائط الإلزامية والاختيارية، مما يتيح تصميم برامج أكثر سهولة للمستخدم.
  • معالجة أخطاء تلقائية: إذا كانت الوسائط ناقصة أو القيم غير صحيحة، تقوم argparse بإظهار رسائل خطأ تلقائية.
  • رسائل مساعدة تلقائية: توفر argparse خيار --help تلقائياً ليتمكن المستخدم من معرفة كيفية استخدام البرنامج بسهولة.

يوضح المثال التالي كيفية استخدام --help لعرض تعليمات أداة سطر الأوامر:

$ python script.py --help
usage: script.py [-h] input_file

positional arguments:
  input_file  الملف المراد معالجته

optional arguments:
  -h, --help  عرض رسالة المساعدة والخروج

 

RUNTEQ(ランテック)|超実戦型エンジニア育成スクール

3. الهيكل الأساسي لـ argparse: شرح خطوة بخطوة

إنشاء ArgumentParser

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

parser = argparse.ArgumentParser(description="برنامج لمعالجة الملفات")

إضافة الوسائط

بعد ذلك، استخدم add_argument() لإضافة الوسائط المطلوبة أو الاختيارية، ويمكنك أيضاً إضافة شرح باستخدام باراميتر help.

parser.add_argument("input_file", type=str, help="يرجى تحديد ملف الإدخال")
parser.add_argument("--verbose", action="store_true", help="تفعيل الإخراج التفصيلي")

تحليل الوسائط

في النهاية، استخدم دالة parse_args() لتحليل الوسائط التي أدخلها المستخدم من سطر الأوامر، حيث يتم حفظها في كائن args.

args = parser.parse_args()

4. مثال عملي: برنامج Python بسيط باستخدام argparse

مثال أساسي

يوضح المثال التالي كيفية إنشاء أداة CLI تستقبل اسم ملف وخيار إخراج تفصيلي باستخدام argparse:

import argparse

parser = argparse.ArgumentParser(description="برنامج لمعالجة ملف")
parser.add_argument("file", help="يرجى تحديد مسار الملف")
parser.add_argument("--verbose", action="store_true", help="تفعيل الوضع التفصيلي")

args = parser.parse_args()

if args.verbose:
    print(f"يتم معالجة الملف '{args.file}' في وضع التفاصيل")
else:
    print(f"يتم معالجة الملف '{args.file}'")

في هذا البرنامج، يمكنك التبديل بين وضع التفاصيل والوضع العادي باستخدام خيار --verbose.

RUNTEQ(ランテック)|超実戦型エンジニア育成スクール

5. ميزات يجب معرفتها في argparse

الوسائط الحصرية (Mutually Exclusive Arguments)

الوسائط الحصرية تعني أن بعض الخيارات لا يمكن استخدامها في نفس الوقت. على سبيل المثال، إذا أردت أن يكون --foo و --bar لا يمكن تحديدهما سوياً.

parser = argparse.ArgumentParser(description="مثال على الوسائط الحصرية")
group = parser.add_mutually_exclusive_group()
group.add_argument("--foo", action="store_true", help="تفعيل foo")
group.add_argument("--bar", action="store_true", help="تفعيل bar")

args = parser.parse_args()

الأوامر الفرعية (Subcommands)

باستخدام الأوامر الفرعية يمكنك تنظيم وظائف متعددة في برنامج واحد، مثل تنفيذ أو إزالة التثبيت.

parser = argparse.ArgumentParser(description="مثال على الأوامر الفرعية")
subparsers = parser.add_subparsers(dest="command")

install_parser = subparsers.add_parser('install')
install_parser.add_argument('package', help="اسم الحزمة للتثبيت")

uninstall_parser = subparsers.add_parser('uninstall')
uninstall_parser.add_argument('package', help="اسم الحزمة للإزالة")

args = parser.parse_args()

if args.command == "install":
    print(f"سيتم تثبيت الحزمة {args.package}")
elif args.command == "uninstall":
    print(f"سيتم إزالة الحزمة {args.package}")

6. التعامل مع الأخطاء والتصحيح باستخدام argparse

رسائل الخطأ التلقائية

يُولّد argparse رسائل خطأ تلقائياً إذا كانت الوسائط ناقصة أو غير صالحة.

$ python script.py
usage: script.py [-h] --input INPUT
script.py: error: the following arguments are required: --input

رسائل خطأ مخصصة

في بعض الحالات، قد تحتاج لإضافة رسائل خطأ أكثر توضيحاً لتقديم تغذية راجعة أفضل للمستخدم.

parser = argparse.ArgumentParser(description="مثال على رسالة خطأ مخصصة")
parser.add_argument("--input", required=True, help="يرجى تحديد ملف الإدخال")

try:
    args = parser.parse_args()
except argparse.ArgumentError as err:
    print(f"خطأ: {err}")

 

7. أمثلة تطبيقية على استخدام argparse

الاستخدام في أدوات الأتمتة

يعد argparse مثالياً لأدوات معالجة الملفات أو تحليل البيانات، حيث يمكن للمستخدم تحديد المسارات أو أوضاع المعالجة مباشرة من سطر الأوامر.

$ python data_processor.py --input data.csv --output results.json --verbose

الاستخدام في المشاريع الكبيرة

في المشاريع الكبيرة، يُحسن الجمع بين الأوامر الفرعية والوسائط الحصرية تجربة المستخدم بشكل كبير. على سبيل المثال، أنظمة إدارة الحزم يمكن أن تجمع وظائف التثبيت والإزالة في أداة واحدة.

$ python package_manager.py install package_name

بفضل argparse يمكن للمستخدمين إدارة النظام بسهولة، كما يتيح إعادة استخدام الكود وصيانته بشكل أفضل.

8. الخلاصة

يتيح لك argparse إنشاء واجهة سطر أوامر (CLI) قوية ومرنة في برامج Python الخاصة بك. يمكنك الاستفادة من الوسائط الإلزامية والاختيارية، الأوامر الفرعية، والوسائط الحصرية لإنشاء برامج سهلة وفعّالة. يعتبر الخيار الأمثل للأدوات الكبيرة أو عمليات أتمتة البيانات وغير ذلك من الاستخدامات العملية.

يساعدك فهم أفضل لطرق التطبيق العملية وتحسين الأداء على كتابة كود أكثر كفاءة، كما أن تطبيق أفضل الممارسات في التعامل مع الأخطاء يتيح للمستخدمين اكتشاف المشكلات بسرعة.

إذا كان لديك أي أسئلة إضافية، لا تتردد في التواصل معنا.

侍エンジニア塾