কম্পিউটার টিউটোরিয়াল

পাইথন কমান্ড লাইন অপশন পার্সার (argparse)

খুব 자주 আমাদের পাইথন স্ক্রিপ্ট কমান্ড লাইন থেকে এক্সিকিউট করার সময় আর্গুমেন্ট পাস করার প্রয়োজন পড়ে। তবে, যদি প্রয়োজনীয় প্যারামিটার সমান সংখ্যা, টাইপ বা অর্ডারে প্রদান না করা হয়, স্ক্রিপ্ট এক্সসেপশন উত্থাপন করে। সেটাই সঠিকভাবে কমান্ড লাইন আর্গুমেন্ট পার্স করার প্রয়োজনীয়তা তৈরি করে।

argparse মডিউল খুব সহজে ব্যবহারযোগ্য কমান্ড লাইন ইন্টারফেস লিখার জন্য টুলস প্রদান করে। এটি sys.argv লিস্টে সংগৃহীত আর্গুমেন্টগুলো কীভাবে পার্স করতে হবে তা হ্যান্ডেল করে, অটোমেটিক্যালি হেল্প জেনারেট করে এবং অবৈধ অপশন দেওয়া হলে এরর মেসেজ ইস্যু করে।

পার্সার অবজেক্ট সেট আপ

কমান্ড লাইন ইন্টারফেস ডিজাইন করার প্রথম ধাপ হলো পার্সার অবজেক্ট সেট আপ করা। এটি argparse মডিউলের ArgumentParser() ফাংশন দ্বারা করা হয়। ফাংশনটিতে একটি ব্যাখ্যামূলক স্ট্রিং description প্যারামিটার হিসেবে দেওয়া যায়।

শুরু করি আমাদের স্ক্রিপ্ট কমান্ড লাইন থেকে কোনো আর্গুমেন্ট ছাড়া এক্সিকিউট হবে। তবুও parser অবজেক্টের parse_args() মেথড ব্যবহার করুন, যা কিছুই করবে না কারণ কোনো আর্গুমেন্ট দেওয়া নেই।

import argparse
parser = argparse.ArgumentParser(description="sample argument parser")
args = parser.parse_args()

উপরের স্ক্রিপ্ট রান করলে:

C:\python36>python argparser1.py
C:\python36>python argparser1.py --help
usage: argparser1.py [-h]
sample argument parser
optional arguments:
-h, --help  show this help message and exit

দ্বিতীয় কমান্ড লাইন --help অপশন দিয়ে একটি হেল্প মেসেজ প্রোডিউস করে যা উপরে দেখানো হয়েছে। --help প্যারামিটার ডিফল্টভাবে উপলব্ধ থাকে।

ম্যান্ডেটরি আর্গুমেন্ট

এখন একটি আর্গুমেন্ট ডিফাইন করি যা স্ক্রিপ্ট চালানোর জন্য বাধ্যতামূলক এবং না দিলে স্ক্রিপ্ট এরর থ্রো করবে। এখানে 'user' আর্গুমেন্ট add_argument() মেথড দিয়ে ডিফাইন করি।

import argparse
parser = argparse.ArgumentParser(description="sample argument parser")
parser.add_argument("user")
args = parser.parse_args()
if args.user == "Admin":
    print("Hello Admin")
else:
    print("Hello Guest")

এই স্ক্রিপ্টের হেল্প এখন একটি পজিশনাল আর্গুমেন্ট 'user' রূপে দেখাবে। প্রোগ্রাম চেক করে এর ভ্যালু 'Admin' কিনা এবং সংশ্লিষ্ট মেসেজ প্রিন্ট করে।

C:\python36>python argparser1.py --help
usage: argparser1.py [-h] user
sample argument parser
positional arguments:
user
optional arguments:
-h, --help  show this help message and exit
C:\python36>python argparser1.py Admin
Hello Admin
C:\python36>python argparser1.py temp
Hello Guest

ডিফল্ট ভ্যালু

add_argument() মেথডে একটি আর্গুমেন্টকে default ভ্যালু অ্যাসাইন করা যায়।

import argparse
parser = argparse.ArgumentParser(description="sample argument parser")
parser.add_argument("user", nargs='?', default="Admin")
args = parser.parse_args()
if args.user == "Admin":
    print("Hello Admin")
else:
    print("Hello Guest")

এখানে nargs হলো কমান্ড-লাইন আর্গুমেন্টের সংখ্যা যা কনসিউম করা উচিত। '?'। কমান্ড লাইন থেকে একটি আর্গুমেন্ট কনসিউম করা হবে যদি সম্ভব হয়, এবং একটি সিঙ্গল আইটেম হিসেবে প্রোডিউস করা হবে। যদি কোনো কমান্ড-লাইন আর্গুমেন্ট না থাকে, default থেকে ভ্যালু প্রোডিউস হবে।

C:\python36>python argparser1.py
Hello Admin
C:\python36>python argparser1.py Admin
Hello Admin
C:\python36>python argparser1.py test
Hello Guest

আর্গুমেন্ট টাইপ

ডিফল্টভাবে সব আর্গুমেন্ট স্ট্রিং হিসেবে বিবেচনা হয়। আর্গুমেন্টের type স্পষ্টভাবে মেনশন করতে, add_argument() মেথডে type প্যারামিটার ব্যবহার করুন। সকল পাইথন ডেটা টাইপ type-এর বৈধ ভ্যালু।

import argparse
parser = argparse.ArgumentParser(description="add numbers")
parser.add_argument("first", type=int)
parser.add_argument("second", type=int)
args = parser.parse_args()
x = args.first
y = args.second
z = x + y
print('addition of {} and {} = {}'.format(x, y, z))
C:\python36>python argparser2.py 2 3
addition of 2 and 3 = 5

অপশনাল আর্গুমেন্ট

উপরের উদাহরণগুলোতে আর্গুমেন্টগুলো ম্যান্ডেটরি। অপশনাল আর্গুমেন্ট যোগ করতে, এর নাম ডবল ড্যাশ -- দিয়ে প্রিফিক্স করুন। নিচের কেসে surname আর্গুমেন্ট অপশনাল কারণ এটি ডবল ড্যাশ (--surname) দিয়ে প্রিফিক্স করা।

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("name")
parser.add_argument("--surname")
args = parser.parse_args()
print("My name is ", args.name, end=' ')
if args.surname:
    print(args.surname)

আর্গুমেন্টের এক অক্ষরের নাম সিঙ্গল ড্যাশ দিয়ে প্রিফিক্স করা হলে এটি একটি শর্ট নেম অপশন হিসেবে কাজ করে।

C:\python36>python argparser3.py Malhar
My name is Malhar
C:\python36>python argparser3.py Malhar --surname Lathkar
My name is Malhar Lathkar
parser.add_argument("-s", "--surname")

choices প্যারামিটার

যদি কাঙ্ক্ষিত হয় যে একটি আর্গুমেন্টের ভ্যালু শুধু একটি ডিফাইন করা লিস্ট থেকে আসুক, তাহলে এটিকে choices প্যারামিটার হিসেবে ডিফাইন করা হয়।

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("sub", choices=['Physics', 'Maths', 'Biology'])
args = parser.parse_args()
print("My subject is ", args.sub)

নোট করুন যদি প্যারামিটারের ভ্যালু লিস্ট থেকে না হয়, ইনভ্যালিড চয়েস এরর দেখাবে।

C:\python36>python argparser4.py Physics
My subject is Physics
C:\python36>python argparser4.py English
usage: argparser4.py [-h] {Physics,Maths,Biology}
argparser4.py: error: argument sub: invalid choice: 'English' (choose from 'Physics', 'Maths', 'Biology')
  1. Matplotlib-এ কার্ভড লাইনের জন্য টাইটেল যোগ করার পদ্ধতি

  2. কমান্ড লাইন মাধ্যমে Matplotlib-এ ইন্টারেক্টিভ প্লটিং

  3. গোল পারসার ইন্টারপ্রিটেশন কমান্ড বের করার প্রোগ্রাম

  4. টکইন্টার (Tkinter) বাটনের কমান্ড মেথড ডাইনামিকভাবে পরিবর্তন করা