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

পাইথনে লাইন-অরিয়েন্টেড কমান্ড ইন্টারপ্রেটার সাপোর্ট (cmd)

cmd মডিউলে শুধু একটি ক্লাস আছে যেটি Cmd নামে। এটি লাইন-অরিয়েন্টেড কমান্ড লাইন ইন্টারপ্রেটারের জন্য একটি ইউজার-ডিফাইনড ফ্রেমওয়ার্কের বেস ক্লাস হিসেবে ব্যবহৃত হয়।

Cmd

এই ক্লাস বা এর সাবক্লাসের একটি অবজেক্ট লাইন-অরিয়েন্টেড ইন্টারপ্রেটার ফ্রেমওয়ার্ক প্রদান করে। এই ক্লাসের গুরুত্বপূর্ণ মেথডগুলো যা সাবক্লাস দ্বারা ইনহেরিট করা হয় নিচে লিস্ট করা হলো।

cmdloop()

এই মেথড অবজেক্টকে একটি লুপে পাঠায়, ইনপুট গ্রহণ করে এবং সেটিকে ক্লাসের উপযুক্ত কমান্ড হ্যান্ডলার মেথডে পাঠায়।

লুপ শুরু होते ही একটি ইন্ট্রোডাক্টরি মেসেজ (cmdloop() মেথডের প্যারামিটার হিসেবে দেওয়া) ডিসপ্লে হবে একটি ডিফল্ট (cmd) প্রম্পটের সাথে যেটি prompt অ্যাট্রিবিউট দ্বারা কাস্টোমাইজ করা যায়।

ইন্টারপ্রেটার অবজেক্ট ইউজার ইনপুটকে দুটি অংশে চিনতে পারে। প্রথম অংশ 'do_' দিয়ে প্রিফিক্স করা হলে ক্লাসের একটি মেথড হিসেবে বিবেচনা করা হয় এবং দ্বিতীয় অংশ সেই মেথডের প্যারামিটার হিসেবে। উদাহরণস্বরূপ যদি ইউজার 'hello Python' এন্টার করে, ইন্টারপ্রেটার ক্লাসে do_hello() মেথড এক্সিকিউট করার চেষ্টা করবে 'Python' প্যারামিটার হিসেবে পাঠিয়ে। যদি সে মেথড ডিফাইন করা থাকে, এটি এক্সিকিউট হবে, অন্যথায় এরর মেসেজ দেখাবে।

Cmd-এর সাবক্লাস do_help() মেথড ইনহেরিট করে। ইউজারের ইনপুট যেমন 'help hello' hello() মেথডের ডকস্ট্রিং ফেচ করে হেল্প টেক্সট হিসেবে দেখাবে, অথবা যদি থাকে, help_hello() মেথড চালাবে।

নিচের উদাহরণ লাইন-অরিয়েন্টেড ইন্টারপ্রেটার ফ্রেমওয়ার্কের অ্যাপ্লিকেশন দেখায়। কোডটি প্রথম cmd মডিউল ইম্পোর্ট করে এবং Cmd ক্লাসের একটি সাবক্লাস ডিফাইন করে।

MathOps ক্লাস add, sub, mul এবং div মেথড ডিফাইন করে (সব do_ ক্যারেক্টার দিয়ে প্রিফিক্সড) ডকস্ট্রিং টেক্সটসহ।

MathOps ক্লাসের একটি অবজেক্ট ডিক্লেয়ার করা হয় এবং cmdloop() মেথড কল করে লুপে পাঠানো হয়। যখন ইউজার প্রম্পটের সামনে help টাইপ করে, সব মেথডের নাম দেখায়। যখন একটি মেথডের নাম help সহ টাইপ করা হয়, সেই মেথডের ডকস্ট্রিং হেল্প টেক্সট হিসেবে দেখায়। যেকোনো মেথড কল করতে, এর নাম, প্রয়োজনীয় আর্গুমেন্ট এবং এন্টার প্রেস করুন। মেথডের ফলাফল দেখাবে এবং প্রম্পট বারবার আসবে যতক্ষণ না ^D ইস্যু করা হয় লুপ রোকার জন্য।

from cmd import Cmd
class MathOps(Cmd):
    def do_add(self, args):
        '''add two numbers'''
        num = args.split()
        print('addition:', int(num[0]) + int(num[1]))
    def do_sub(self, args):
        '''subtract two numbers'''
        num = args.split()
        print('subtraction:', int(num[0]) - int(num[1]))
    def do_mul(self, args):
        '''multiply two numbers'''
        num = args.split()
        print('multiplication:', int(num[0]) * int(num[1]))
    def do_div(self, args):
        '''perform division'''
        num = args.split()
        print('division:', int(num[0]) / int(num[1]))
    def do_EOF(self, args):
        return True

op = MathOps()
op.prompt = "->"
op.cmdloop("loop starts. Press ^D to exit")

উপরের স্ক্রিপ্টের একটি স্যাম্পল রান নিচে দেখানো হলো:

loop starts. Press ^D to exit
->help
Documented commands (type help ):
========================================
add  div  help  mul  sub
Undocumented commands:
======================
EOF
->help add
add two numbers
->add 5 7
addition: 12
->div 10 5
division: 2.0
->>
  1. পাইথনে ক্লাস এবং অবজেক্ট: বেগাইনারদের জন্য

  2. পাইথনে কমপ্লেক্স নম্বারের জন্য ক্লাস ডিফাইন করার প্রোগ্রাম

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

  4. পাইথনে ক্লাস মেথড ওভাররাইড কীভাবে করবেন?