আমার বাশ (bash) এর সাথে একটু লাভ-হানির (love and hate) রিলেশনশিপ আছে। আমি টার্মিনেলে অনেক সময় কাটি, এবং বাশ হলো আমার ডিফল্ট "প্রোগ্রামিং ল্যাঙ্গুয়েজ"। কখনো কখনো আমি লোক들에게 বলি find, grep এবং xargs তাদের ইনফ্রাস্ট্রাকচার চালাচ্ছে, এবং সবাই হেসে হেসে পড়ে - যতক্ষণ না তারা বুঝতে পারে আমি সিরিয়াস।
সিস্টেম অ্যাডমিনিস্ট্রেটরদের জন্য পাইথন (Python) শিখা একটি পーフেক্ট চয়েস। এছাড়া যারা টার্মিনেলে যেকোনো কাজ করে কিন্তু বাশ ব্যবহার করতে চায় না, বা যাদের نيডস (needs) বাশের জন্য খুব জটিল, তাদের জন্যও এটি চমৎকার। একবার কোনো টাস্ক এই লেভেলের বাইরে চলে গেলে
find $(pwd) -name "*.txt" | xargs -I {} echo "do stuff with {}"
তখন পাইথন বের করার সময়!
পাইথন আপনার গো-টু (go to) কমান্ড লাইন ল্যাঙ্গুয়েজ হিসেবে ব্যবহার করার অনেক সুবিধা আছে।
- প্রায় সব কিছুর জন্য পাইথনে চমৎকার লাইব্রেরিগুলো আছে। এতে সিস্টেম অপারেশন, ফাইল পড়া, ডিরেক্টরি লিস্ট করা, ফর লুপ লিখা, এক্সিট কোড চেক করা, ইত্যাদি সহজ হয়।
- আইডিইস (IDEs) দিয়ে অটোকমপ্লিট (Autocomplete)। সিরিয়াসলি। কে কিছু মেমোরাইজ (memorize) করতে চায়?
- রবাস্ট টেস্টিং সুইট (Robust testing suite) যদি সেটি আপনার পছন্দ হয় (এবং না হয়, তবে আপনাকে সেটি পছন্দ করা উচিত)।
- আইপাইথন কনসোল (iPython console)। এটি চমৎকার। এটি অ্যামেজিং। I LOVE IT.
- পাইথন অধিকাংশ সিস্টেমে উপলব্ধ, এবং যদি না থাকে তবে মিনিকন্ডা (Miniconda) দিয়ে পাওয়া যায়।
- ট্রাই (try) এবং ক্যাচ (catch) ব্লক দিয়ে রবাস্ট এরর চেকিং (Robust error checking)।
- আপনি যদি ভিন্ন অপারেটিং সিস্টেমে কাজ করেন তবে পাইথন লাইব্রেরিগুলো সেটা হাড (under the hood) হ্যান্ডেল করবে।
- আপনার যদি কোনো প্রোগ্রামিং ক্ষমতা না থাকে তবে পাইথন একটি সহজ ল্যাঙ্গুয়েজ जिससे শুরু করা যায়।
শুরু করা যাক
শুরুতে, প্রথমে আপনার পাসে পাইথন ইনস্টল করা থাকতে হবে বা মিনিকন্ডা দিয়ে ইনস্টল করতে হবে।
চেক করুন আপনার পাসে iPython আছে কিনা
which python which ipython
যদি দুটোই সফল হয়, তবে আপনি রেডি! আপনার পাসে পাইথন থাকতে পারে কিন্তু iPython নাও থাকতে পারে, সেক্ষেত্রে আপনাকে সেটি ইনস্টল করতে হবে। আপনি সিস্টেম প্যাকেজ হিসেবে ইনস্টল করতে পারেন, কিন্তু আমি স্ট্রংলি রিকমেন্ড করি যে আপনি শুধু মিনিকন্ডা দিয়ে ইনস্টল করুন।
মিনিকন্ডা ইনস্টল করুন
আপনার ওএস (OS)-এর জন্য ইনস্টলার এখান থেকে নিন। আমি পাইথন৩ (Python3) ইনস্টলেশন সাজেস্ট করি।
তারপর এটি শুধু একটি সিম্পল ইনস্টলেশন।
bash Miniconda3-latest-Linux-x86_64.sh
প্রম্পটগুলো ফলো করুন এবং আপনার মিনিকন্ডা৩ (Miniconda3) ইনস্টল হয়ে যাবে। একবার ইনস্টল হলে আপনি একটি আপডেট চালাতে চাবেন, কারণ এটা টেক (tech) এবং অবশ্যই আপনি আপডেট চালাতে চাবেন। ;-)
conda update conda conda config --add channels conda-forge conda update -y --all conda install -y ipython
ট্রাবলশুটিং (Troubleshooting)
যদি প্যাকেজ ইনস্টল করতে কোনো সমস্যা হয় তবে কিছু টিপস:
conda clean --allচালান এবং আবার চেষ্টা করুন।- নিশ্চিত করুন যে আপনি সঠিক চ্যানেল (channel) ব্যবহার করছেন।
conda update -y --allচালান- গ্লোবাল কন্ডা স্পেস (global conda space)-এ যত কম সম্ভব ইনস্টল করার চেষ্টা করুন। পরিবর্তে বিভিন্ন টাস্ক ও প্রজেক্টের জন্য এনভায়রনমেন্ট (environments) তৈরি করুন, যা আমরা এখন জানব।
কন্ডা দিয়ে এনভায়রনমেন্ট তৈরি করুন
আপনি যদি কখনো virtualenv, pipenv (সেটি কী একটা?), Rbenv, plenv, anyenv বা বছরের মাঝপথে উঠে আসা অন্যান্য env-গুলো ব্যবহার করে থাকেন, তবে আপনার কাছে খুব পরিচিত লাগবে। ধারণা হচ্ছে ভিন্ন প্রজেক্টের ভিন্ন আইসোলেটেড (isolated) সফ্টওয়্যার এনভায়রনমেন্ট থাকা উচিত।
conda create -n my-project ipython package1 package2 package2
আপনি যদি আমার মতো iPython সহজে পেতে চান তবে নিশ্চিত করুন যে আপনি যেকোনো নতুন এনভায়রনমেন্টে সেটি ইনস্টল করেছেন!
সিস্টেম অ্যাডমিনিস্ট্রেশনের জন্য পাইথন লাইব্রেরিগুলো
উদাহরণগুলোর মধ্যে যাওয়ার আগে কিছু হ্যান্ডি প্যাকেজ এবং তাদের ডকস লিস্ট করি।
আমার গো-টু (go to) প্যাকেজ হচ্ছে os প্যাকেজ। আপনি এটি ব্যবহার করতে পারেন ডিরেক্টরি লিস্ট করতে, ফাইল এক্সিস্ট (exist) করে কিনা চেক করতে, সিম্বলিক লিংক এক্সিস্ট করে কিনা চেক করতে, ডিরেক্টরি তৈরি করতে, সিস্টেম কমান্ড চালাতে, এনভায়রনমেন্ট ভেরিয়েবল গেট ও সেট করতে, এবং আরও অনেক কিছু। এটি চমৎকার!
আমার দ্বিতীয় প্যাকেজ হচ্ছে subprocess মডিউল সিস্টেম কমান্ড চালানোর জন্য যেগুলো হ্যান্ডি পাইথন লাইব্রেরি হিসেবে উপলব্ধ নয়।
shutil-এ ফাইল অপারেশন আছে যা os লাইব্রেরিতে নেই।
pprint লাইব্রেরি কমপ্লেক্স ডেটা স্ট্রাকচারকে সুন্দর ইন্ডেন্টেশন (indentation) সহ প্রিন্ট করে।
pytest লাইব্রেরি আপনাকে আপনার পাইথন কোড টেস্ট করতে দেয়, কারণ মানতে হবে, কিছুই ফাস্ট টাইমে (first (few) times) সঠিকভাবে কাজ করে না।
আমার কোড এক্সিকিউট করার পদ্ধতি
এখন কোড!

সিস্টেম অ্যাডমিনিস্ট্রেশনের জন্য পাইথন ব্যবহার করলে আপনি সরাসরি আইপাইথন কনসোলে ঢুকে पड़েন, অথবা স্ক্রিপ্ট লিখে তারপর python name-of-script.py দিয়ে এক্সিকিউট করেন।
আপনি যদি স্ক্রিপ্ট লিখতে পছন্দ করেন তবে আপনার অনেক চয়েস আছে, এবং এটি খুব ব্যক্তিগত পছন্দের বিষয়। আমি PyCharm ব্যবহার করি, যা পেইড (paid), কিন্তু Visual Studio Code এবং Atom সমানভাবে চমৎকার ফ্রি চয়েস।
আমি মনে করি এটি নির্ভর করে আমি কীতে কাজ করছি। কখনো কখনো আমি শুধু আইপাইথন কনসোল খুলি এবং টাইপ करना শুরু করি, আর কখনো কিছু আরও রবাস্ট (robust) দরকার হয় টেস্টসহ।
আপনি যদি উপরে যেকোনো এডিটর বা আইপাইথন কনসোল ব্যবহার করেন, তবে আপনাকে অটোকমপ্লিট (autocomplete) मिलবে। অটোকমপ্লিট অর্েসম (awesome)! আইপাইথনে শুধু আপনার ফাংশন টাইপ করা শুরু করুন এবং ট্যাব (tab) চাপুন যাতে আপনি যেসব ফাংশন চাইতে পারেন তার লিস্ট পান।

আমি কতটুকু অটোকমপ্লিট ভালোবাসি তা এক্সপ্রেস (express) করি না। ;-)
হেল্প (Help) পান
আপনি যেকোনো লাইব্রেরির ডক পেজে যেতে পারেন, কিন্তু আপনি যদি লাইব্রেরি বা ফাংশনের নাম জানেন তবে আইপাইথনে সেটি আনতে পারেন।


আপনি অধিকাংশ আইডিই (IDEs) এবং টেক্সট এডিটরেও হেল্প মেনু আনতে পারেন, কিন্তু সেটি আপনার এডিটর-স্পেসিফিক হবে।
উদাহরণসমূহ
প্রথমে আপনাকে আপনার প্যাকেজগুলো ইম্পোর্ট (import) করতে হবে
import os import subprocess import shutil from pprint import pprint
এখানে কিছু সাধারণ ফাইল ও ডিরেক্টরি অপারেশন-এর উদাহরণ।
# Get your current working directly # This returns a string my_cwd = os.getcwd() print(my_cwd)
# List the contents of a directory # This returns a list dir_list = os.listdir() for item in dir_list: print(item)
# Get the Absolute Path name of a file (file + current working dir) os.path.abspath('some-file')
#Get the basename - returns file os.path.basename('/path/to/file')
# Split a directory path - platform independent os.path.split(os.getcwd()) # Out[17]: ('/Users', 'jillian')
# Check if a path exists os.path.exists('/path/on/filesystem')
# Check if a path is a symlink os.path.islink()
ফাইল ও ডিরেক্টরি মুভ (move) করুন
# Copy a directory # cp -rf shutil.copytree('src', 'dest')
# Copy a file # cp -rf shutil.copyfile('file1', 'file2')
# Move a directory # mv shutil.move('src', 'dest')
সব কিছু পাইথন লাইব্রেরির মাধ্যমে উপলব্ধ হবে না, যেমন সিস্টেম লাইব্রেরি ইনস্টল করা, তাই কিছু সিস্টেম কমান্ড চালান!
# Run an arbitrary system command command = "echo 'hello'" result = subprocess.run(command.split(' '), stdout=subprocess.PIPE, stderr=subprocess.PIPE) #Print the stdout and stderr print(result.stdout) print(result.stderr)
ফাইলে রাইট (write) করুন!
# Write to a file (and create it if it doesn't exist) # echo "hello" > hello.txt f= open("hello.txt","w+") f.write("hello!") f.close()
# Append to a file # echo "hello" >> hello.txt f = open("hello.txt", "a+") f.write("hello again!") f.close()
কিছু টেস্ট লিখুন!
টেস্টগুলো অধিকাংশ_assert_ ফাংশন দিয়ে কাজ করে, যা মূলত বলছে এইটি সত্য নিশ্চিত করো এবং যদি না হয় তবে जोরদার ভাবে ফেল করো (die loudly)।
def test_system_command(): """Test the exit code of a system command""" command = "echo 'hello'" result = subprocess.run(command.split(' '), stdout=subprocess.PIPE) assert result.returncode == 0
এই ফাংশনটি test_my_code.py নামে একটি ফাইলে রাখুন এবং pytest test_my_code.py দিয়ে রান করুন।
র্যাপ আপ (Wrap Up)
বাশ রিপ্লেসমেন্ট হিসেবে পাইথন ব্যবহার করার জন্য আমার প্রধান টিপস ও ট্রিকস এটুকুই। আপনার পরবর্তী বার বাশে লুপ লিখতে গেলে, আইপাইথন কনসোল বের করে দেখুন আপনি কী বানাতে পারেন!