إذا كنت مشتركًا في معالجة البيانات وتحليلها باستخدام Python ، فعندئذٍ ، عاجلاً أم آجلاً ، سيتعين عليك تجاوز Jupyter Notebook ، وتحويل التعليمات البرمجية الخاصة بك إلى نصوص يمكن تشغيلها باستخدام سطر الأوامر. هذا هو المكان الذي يأتي في وحدة argparse في متناول اليدين. بالنسبة للمبتدئين ، الذين اعتادوا على Jupyter Notebook ، تعني هذه الخطوة الحاجة إلى مغادرة منطقة الراحة والانتقال إلى بيئة جديدة. المواد ، التي نُنشر ترجمتها اليوم ، مكتوبة من أجل تسهيل هذا الانتقال.
وحدة Argparseوحدة Argparse
يمكن مقارنة وحدة argparse مع قوى الطبيعة التي أقامت قمم الجبال الشاهقة فوق السحب. بفضل هذه الوحدة النمطية في البرامج النصية ، يصبح من الممكن العمل مع ما ، بدون استخدامه ، سيكون مخفيًا عن رمز هذه النصوص.
تجدر الإشارة إلى أن
argparse هي وحدة مكتبة Python القياسية الموصى بها للعمل مع وسيطات سطر الأوامر. لم أتمكن من العثور على برنامج تعليمي جيد argparse للمبتدئين ، لذلك قررت أن أكتب واحدة بنفسي.
الحياة خارج دفتر Jupyter
عندما صادفت الجدال لأول مرة في سيناريو بيثون الذي كنت بحاجة إليه لمشروع قمت به في وقت فراغي ، فكرت: "ما هذا البناء الغامض؟" بعد ذلك ، قمت بنقل الكود بسرعة إلى Jupyter Notebook ، ولكن تبين أن هذه الخطوة غير عقلانية.
كنت بحاجة إلى أن أكون قادرًا على تشغيل البرنامج النصي فقط ، وعدم العمل معه باستخدام Jupyter Notebook. سيكون استخدام البرنامج النصي المستقل الذي يستخدم وحدة argparse أسهل بكثير ، وسيكون العمل عليه أسهل من الاعتماد على قدرات Jupyter Notebook. ومع ذلك ، كنت في عجلة من أمري ، وعندما نظرت إلى وثائق argparse ، لم أتمكن من فهم جوهرها على الفور ، لذلك لم أستخدم الإصدار الأصلي من البرنامج النصي.
منذ ذلك الحين ، اكتشفت argparse وأحببت هذه الوحدة حقًا. الآن أنا أعتبرها حيوية للغاية. ومع ذلك ، لإتقان أنها ليست صعبة للغاية.
لماذا نحتاج إلى وحدة argparse؟
تتيح لك الوحدة النمطية argparse تحليل الوسائط التي يتم تمريرها إلى البرنامج النصي عند تشغيله من سطر الأوامر ، وتجعل من الممكن استخدام هذه الوسائط في البرنامج النصي. أي أننا نتحدث عن حقيقة أن هذه الوحدة تسمح للبرنامج النصي بتوفير بعض البيانات في وقت إطلاقه ، وسيكون البرنامج النصي قادراً على استخدام هذه البيانات أثناء تنفيذ الكود. الوحدة النمطية argparse هي أداة يمكنك من خلالها إنشاء اتصال بين مؤلف البرنامج والشخص الذي يستخدمه ، على سبيل المثال ، بينكما عند كتابة برنامج نصي اليوم وأنت عندما تقوم بتشغيله غداً ، لتمرير شيء ما إليه.
يعني استخدام argparse ، إذا لزم الأمر ، تغيير سلوك البرنامج النصي ، أو نقل بعض البيانات إليه إذا لزم الأمر ، إذا تم توفيره من قبل مؤلف البرنامج النصي ، فلن يحتاج المستخدم إلى تعديل رمز البرنامج. نتيجة لذلك ، تكتسب البرامج النصية مستوى معينًا من المرونة.
مثال
افترض أنك تريد كتابة برنامج نصي لتحويل ملفات الفيديو إلى صور عادية باستخدام
مكتبة OpenCV . لكي يتمكن البرنامج النصي من حل هذه المشكلة ، يجب أن يعرف المكان الذي يتم تخزين ملفات الفيديو فيه والمكان الذي تريد وضع الصورة النهائية فيه. أي أنه يحتاج إلى معلومات حول مجلدين ، والمسارات التي ، والتي ليست مريحة للغاية ، يمكن ترميزها بشكل صارم في رمز البرنامج النصي ، أو ، وهو أفضل بالفعل ، يمكنك السماح للمستخدم بتحديد البرنامج النصي عن طريق إدخالها كوسيطات لسطر الأوامر عند تشغيل البرنامج النصي. من أجل تزويد البرنامج النصي بمثل هذه الفرصة ، فإن وحدة argparse مفيدة لنا. إليك ما قد يبدو عليه قسم البرنامج النصي (دعنا نسمي هذا البرنامج النصي
videos.py
) ، حيث يتم تحليل وسيطات سطر الأوامر:
هنا ، في بداية الملف ، يتم استيراد وحدة argparse. ثم ، باستخدام إنشاء
argparse.ArgumentParser()
، يتم إنشاء كائن
parser
مع الوصف الخاص به. بعد ذلك ، باستخدام طريقة
parser.add_argument()
، يتم
indir
متغير
parser.add_argument()
، حيث يتم التخطيط لكتابة المسار إلى المجلد باستخدام ملفات الفيديو. في الوقت نفسه ، يشار إلى أنه يحتوي على نوع سلسلة ، ويتم أيضًا تعيين معلومات المرجع حوله. بعد ذلك ، بنفس الطريقة ، يتم
outdir
متغير
outdir
، والذي
outdir
على المسار إلى المجلد الذي سيضع فيه البرنامج النصي الصور التي تم إنشاؤها على أساس ملفات الفيديو. في الخطوة التالية ، تحصل نتيجة تحليل وسيطات سطر الأوامر على متغير
args
. ما يتم تمريره إلى البرنامج النصي عند بدء التشغيل سيكون متاحًا الآن
outdir
indir
و
outdir
لكائن
args
. الآن يمكنك العمل مع هذه القيم. في هذه الحالة ، نطبع ببساطة إلى وحدة التحكم ما يتم تمريره إلى البرنامج النصي في وسيطة
indir
.
إليك كيفية تشغيل هذا البرنامج النصي من سطر الأوامر:
python videos.py /videos /images
لاحظ أن الخطوط
/videos
و
/images
لا تحتاج إلى نقلها. سينتج البرنامج النصي الذي تم إطلاقه بهذه الطريقة الخط
/videos
إلى الجهاز ، مما يؤكد إمكانية استخدام الوسائط التي تم تمريرها إليها في الكود. هذا هو سحر argparse في العمل.
سحر تحليل وسيطات سطر الأوامرتفاصيل Argparse
نظرنا للتو في مثال بسيط argparse. الآن دعونا نناقش بعض التفاصيل المتعلقة argparse.
▍ الحجج الموضعية
parser.add_argument('indir', type=str, help='Input dir for videos')
إنشاء النموذج
parser.add_argument('indir', type=str, help='Input dir for videos')
من البرنامج النصي
videos.py
إلى إنشاء وسيطة
videos.py
. عند الاتصال ببرنامج نصي ، يكون الترتيب الذي يتم به تحديد هذه الوسائط مهمًا. لذلك ، تصبح الوسيطة الأولى التي تم تمريرها إلى البرنامج النصي الوسيطة الموضعية الأولى ، وتصبح الوسيطة الثانية هي الوسيطة الموضعية الثانية.
ماذا يحدث إذا تم تشغيل البرنامج النصي دون أي وسيطات عن طريق تشغيل أمر
python videos.py
في الجهاز؟
في هذه الحالة ، سيتم عرض رسالة الخطأ التالية:
videos.py: error: the following arguments are required: indir, outdir
نتيجة لذلك ، اتضح أنه من أجل تشغيل برنامج نصي يوفر استخدام الوسائط الموضعية ، يجب دائمًا تحديد مثل هذه الوسائط عند تشغيله.
arg الحجج الاختيارية
ماذا يحدث عند تشغيل البرنامج النصي الخاص بنا باستخدام أمر
python videos.py --help
؟
استجابةً لذلك ، سيتم عرض معلومات المساعدة حوله. هذه هي بالضبط المعلومات حول الوسائط الموضعية التي أشرنا إليها عند وصف المتغيرات المقابلة:
usage: videos.py [-h] indir outdir Videos to images positional arguments: indir Input dir for videos outdir Output dir for image optional arguments: -h, --help show this help message and exit
أخبرنا البرنامج النصي بالكثير من الأشياء المثيرة للاهتمام حول ما يتوقعه المستخدم ،
help
هي مثال على وسيطة اختيارية. لاحظ أن
--help
(أو -
-h
) هي الوسيطة الاختيارية القياسية الوحيدة التي يمكننا استخدامها عند التعامل مع argparse ، ولكن إذا كنت بحاجة إلى وسائط اختيارية أخرى ، فيمكنك إنشاؤها بنفسك.
يتم إنشاء الوسائط الاختيارية بنفس طريقة استخدام الوسائط الموضعية. يتمثل الاختلاف الرئيسي بين الأوامر الخاصة بإنشائها في أنه عند تحديد أسماء مثل هذه الوسيطات ، تبدأ هذه الأسماء بتسلسل من الأحرف
--
أو في أشكال قصيرة من الوسائط
-
بحرف
-
. على سبيل المثال ، يمكن إنشاء وسيطة اختيارية مثل هذا:
parser.add_argument('-m', '--my_optional')
فيما يلي مثال عن كيفية إنشاء وسيطات اختيارية واستخدامها. لاحظ أنه عند وصف الوسيطة الاختيارية هنا ، حددنا نوعها كـ
int
. وهذا هو ، هو عدد صحيح. في موقف مماثل ، يمكنك استخدام أنواع أخرى من بيثون.
تتوفر الوسيطة الموصوفة كـ -
--my_optional
في البرنامج
my_namespace
لكائن
my_optional
المسمى
my_optional
.
يمكن تعيين الوسائط الاختيارية للقيم التي ستحصل عليها افتراضيًا. في حالتنا ، إذا لم يتم إعطاء قيمة
my_example
عند استدعاء البرنامج النصي ، فسيتم كتابة الرقم 2 عليها ، والذي سيتم إخراجه إلى وحدة التحكم. لتعيين قيمة هذه الوسيطة أثناء تنفيذ البرنامج النصي ، يمكنك استخدام الإنشاء التالي:
python my_example.py --my_optional=3
ماذا يمكن أن تستخدم argparse ل؟
يمكن استخدام وحدة argparse لتطوير تطبيقات Python التي تم التخطيط لتعبئتها في حاويات Docker. لذلك ، على سبيل المثال ، إذا كان عند بدء تشغيل تطبيق تم تعبئته في حاوية ، فإنه يحتاج إلى تمرير وسيطات سطر الأوامر إليه ، ثم يمكن وصفه في مرحلة تجميع الحاوية في Dockerfile باستخدام تعليمة
RUN
. يمكنك استخدام إرشادات
CMD
أو
ENTRYPOINT
لتشغيل البرامج النصية أثناء
ENTRYPOINT
الحاوية. تفاصيل حول Dockerfiles يمكن العثور عليها
هنا .
ملخص
درسنا الطرق الأساسية للعمل مع وحدة argparse ، باستخدام والتي يمكنك تجهيز البرامج النصية الخاصة بك مع القدرة على قبول وسيطات سطر الأوامر. تجدر الإشارة إلى أن ميزات argparse لا تنتهي عند هذا الحد. على سبيل المثال ، يتيح
لك استخدام معلمة
nargs عند وصف الوسائط التعامل مع قوائم الوسائط ، وتتيح
لك معلمة
الاختيارات تحديد مجموعات من القيم التي يمكن أن تأخذها الوسائط. في الواقع ، الآن ، بعد أن أتقنت السمات الرئيسية لـ argparse ، يمكنك ، بدون صعوبة كبيرة ، دراسة هذه الوحدة بشكل أكثر عمقًا ، باستخدام
الوثائق الخاصة بها.
إذا كنت معتادًا على العمل مع Jupyter Notebook وترغب في الابتعاد عن هذه الممارسة ،
فإليك هنا - المواد المتعلقة بالعمل مع متغيرات البيئة.
فيما يلي المواد الموجودة على
أداة repo2docker ، والتي تتيح لك تحويل مستودعات Jupyter Notebook إلى صور Docker.
أعزائي القراء! كيف يمكنك العمل مع وسيطات سطر الأوامر في البرامج النصية بيثون؟
