Bnlang এ কমান্ড লাইন থেকে ইনপুট নেওয়া
Bnlang-এ কমান্ড লাইন আর্গুমেন্ট পড়ার দু'টি লেয়ার আছে:
sys.arg(i)— কাঁচা, লো-লেভেল অ্যাক্সেসর। এক-দু'টি পজিশনাল ইনপুটের জন্য ভালো।cliমডিউল — ফ্ল্যাগ, অপশন এবং পজিশনাল আর্গুমেন্টের জন্য একটি ডিক্লেয়ারেটিভ পার্সার। যখন আপনার আরো স্ট্রাকচার্ড কিছু থাকে তখন ভালো।
Raw Access with sys.arg
sys.argc() ফেরত দেয় স্ক্রিপ্ট কত আর্গুমেন্ট পেয়েছে; sys.arg(i) ফেরত দেয় i-তম টা (0-ইনডেক্সড)। স্ক্রিপ্ট পাথ নিজেকে গণনা করা হয় না।
// file: greet.bnl
import "sys" as sys;
var name = "Guest";
if (sys.argc() > 0) { name = sys.arg(0); }
print("Hello,", name);
bnl greet.bnl Alice
# Output: Hello, Alice
Structured Parsing with the cli Library
এক-দু'টা পজিশনাল ইনপুটের বাইরে যাকিছু, cli লাইব্রেরি দিয়ে আপনার CLI শেপ ডিক্লেয়ার করুন। ফ্ল্যাগ, অপশন (মান-সহ), পজিশনাল আর্গুমেন্ট, এবং একটি অটো-জেনারেটেড --help স্ট্রিং পাবেন।
// file: greet.bnl
import "cli" as cli;
var p = cli.parser("greet");
p.description = "Print a greeting.";
cli.flag (p, {name: "shout", short: "s", help: "Use upper case"});
cli.option (p, {name: "lang", short: "l", help: "en or bn", default: "en"});
cli.positional(p, {name: "name", help: "Who to greet"});
var args = cli.parse(p);
var msg = "Hello, ";
if (args.lang == "bn") { msg = "হ্যালো, "; }
msg = msg + args.name + "!";
if (args.shout) { msg = msg.to_upper(); }
print(msg);
bnl greet.bnl Alice
# Hello, Alice!
bnl greet.bnl -l bn আলিস
# হ্যালো, আলিস!
bnl greet.bnl -s Alice
# HELLO, ALICE!
Showing Help
cli.usage(p) অটো-জেনারেটেড হেল্প টেক্সট ফেরত দেয়। নিজের --help ফ্ল্যাগ ডিফাইন করুন এবং পার্সিং-এর পরে চেক করুন:
cli.flag(p, {name: "help", short: "h", help: "Show usage"});
var args = cli.parse(p);
if (args.help) {
print(cli.usage(p));
return;
}
Best Practices
- দু'টার বেশি ইনপুট, বা কোনো অপশনাল ফ্ল্যাগ থাকলে সাথে সাথে
cliব্যবহার করুন। হ্যান্ডরিটেন পার্সিং-এর চেয়ে এটা মেইনটেন করা অনেক সহজ। - যুক্তিসঙ্গত ডিফল্ট দিন, যাতে কোনো আর্গুমেন্ট ছাড়াই স্ক্রিপ্ট কিছু কাজের কাজ করে।
- ভুল ইনপুটে একটি usage hint প্রিন্ট করুন এবং non-zero কোড দিয়ে এক্সিট করুন।