مكتبة optparse لتصميم المدخلات في بايثون
مكتبة optparse هي مكتبة مهمة جداً و هي تُساعدنا بعمل تصميم للمدخلات inputs الخاصة في المستخدم, مثلاً إذا كتبنا سكربت خاص في إختبار إختراق penetration testing بالتأكيد هنا سوف نحتاج لإضافة مُدخلات لكي نقوم بالشرح للمستخدم على كيفية إستخدام هذا السكربت الذي برمجناه و هذا الشرح يكون عبر مكتبة optparse.
و تعتبر مكتبة optparse أكثر ملائمة و مرونة و قوة في تحليل خيارات سطر الأوامر من وحدة getopt, و تستخدم optparse إسلوباً أكثر تفصيلاً من أجل تحليل سطر الأوامر.
يمكن إنشاء مثيل لـ OptionParser و ملئه بالخيارات و تحليل سطر الأوامر, يسمح optparse للمستخدمين بتحديد الخيارات في صيغة GNU / POSIX التقليدية بالإضافة إلى إنشاء رسائل الإستخدام و المساعدة نيابة عنك مثلا -h للمساعدة.
تُستخدم الخيارات من أجل توفير معلومات إضافية لضبط تنفيذ البرنامج أو تخصيصه و في حالة عدم الوضوح تكون الخيارات عادتاً إختيارية و يجب أن يكون البرنامج قادراً على العمل بشكل جيد دون أي خيارات على الإطلاق.
كمثال على التصميم الجيد لواجهة سطر الأوامر ضع في إعتبارك أداة cp المتواضعة لنسخ الملفات و أنه ليس من المنطقي محاولة نسخ الملفات بدون توفير وجهة و مصدر واحد على الأقل وبالتالي يفشل cp إذا قمت بتشغيله بدون وسيطات و مع ذلك فإنه يحتوي على بنية مرنة و مفيدة لا تتطلب أي خيارات على الإطلاق.
مثال 1
سوف ننشئ ملف على سطح المكتب بإسم script.py.
from optparse import OptionParser parser = OptionParser (""" #هنا نكتب تعريف للسكربت الخاص بنا مثلا My Tool is designed for penetration testing we need the website url and data """) parser.add_option("-u","--url",dest="target_url",help="target url",deault="https://www.nusurtech.ca") parser.add_option("-d","--data",dest="target_data",help="target data",deault="my data") (options,args) = parser.parse_args() if options.target_url == None and options.target_data == None: print (parser.usage) exit(0) else: print("{0}:{1}".format(options.target_url,options.target_data))
أضفنا في مثالنا خيارات options و هي parser الذي عرفّناه مسبقاً و إستخدمنا معه الأرجيومنت المطلوبة وهي :
- الـ u- هي إختصار لـ url المطلوبة من المستخدم.
- الـ u-- إذا نُريد من المستخدم وضع url كاملاً.
- الـ dest نتعامل معه كمتغير.
- الـ help للدخول للمساعدة.
- الـ default الإفتراضي.
- الـ d- إختصار لـ data.
- الـ data-- وضع data كاملة.
نستطيع إضافة خيارات أكثر من إثنان حسب طلبنا و يكون بنفس المضمون السابق, و بعدها حددنا المُدخلات args المطلوبة عبر options.args و عينّنا له المُدخلات الخاصة في parser و تخزينها كلها في options.args و وضعنا شرط عبر if و عيننا قيم فارغه لـ target data و target url و قلنا له إطبع لنا الإستخدام parser.usage و الخروج من السكربت و وضعنا else بحال إذا المستخدم أدخل الخيارات و url مع بعض وقلنا له إطبع لنا القيم كاملة و إستخدمنا هنا format شرحناها مسبقاً.
تشغيل السكربت الذي كتبناه سابقاً عند تشغيل هذا الإسكربت حاليا سوف تكون النتيجة.
https://www.nusurtech.ca :my data
نلاحظ أنه طبع لنا قيم الـ default.
مجموعة خيارات option group
إذا كان لدينا مجموعة خيارات options خاصة بشيئ معين فيلزم وضع شرح لها وحدها مثل الأدوات الكبيرة يلزم وضع لها أكثر من options و سوف نستخدم في هذا option group, سوف نعطي تضمين import للكل أولاً عبر وضع نجمه *.
مثال 2
from optparse import * parser = OptionParser (""" هنا نكتب تعريف للسكربت الخاص بنا مثلا My Tool is designed for penetration testing we need the website url and data """) parser.add_option("-u","--url",dest="target_url",help="target url",deault="https://www.nusurtech.ca") parser.add_option("-d","--data",dest="target_data",help="target data",deault="my data") #---------Advanced Group new_group = OptionGroup(parser,"advanced options","some options for advanced usage") new_group.add_option("-p","--payload",dest="target_payload",help="target payload",default="AMVIIP") new_group.add_option("-D","--down",dest="target_download",help="target download",default="MUHAMMAD") #-------END ADVANCED GROUP (options,args) = parser.parse_args() if options.target_url == None and options.target_data == None: print (parser.usage) exit(0) else: print("{0}:{1}".format(options.target_url,options.target_data)) print("{0}:{1}".format(options.target_payload,options.target_download))
النتيجة كالتالي سيعرضها
AMVIIP:MUHAMMAD