ازگر میں کمانڈ لائن دلائل

مجموعی جائزہ

Python ایک بہت مشہور پروگرامنگ لینگویج ہونے کے ساتھ ساتھ زیادہ تر آپریٹنگ سسٹمز اور بہت سی لائبریریوں کے لیے سپورٹ رکھتا ہے جو کمانڈ لائن آرگومنٹ پروسیسنگ کو آسان بناتی ہے - یہ بہت سے مقاصد کے لیے کمانڈ لائن ٹولز بنانے کے لیے بڑے پیمانے پر استعمال ہونے لگی ہے۔ یہ ٹولز سادہ سی ایل آئی ایپس سے لے کر ان تک ہوسکتے ہیں جو زیادہ پیچیدہ ہیں، جیسے AWS' awscli آلہ.

اس طرح کے پیچیدہ ٹولز کو عام طور پر صارف کے ذریعے کنٹرول کیا جاتا ہے۔ کمانڈ لائن دلائل، جو صارف کو مخصوص کمانڈز، سیٹ آپشنز، اور بہت کچھ استعمال کرنے کی اجازت دیتا ہے۔ مثال کے طور پر، یہ اختیارات ٹول کو اضافی معلومات کو آؤٹ پٹ کرنے، کسی مخصوص ذریعہ سے ڈیٹا پڑھنے، یا کسی مخصوص مقام پر آؤٹ پٹ بھیجنے کے لیے بتا سکتے ہیں۔

عام طور پر، آپ کے آپریٹنگ سسٹم کے لحاظ سے دلائل CLI ٹولز کو مختلف طریقے سے منتقل کیے جاتے ہیں:

  • یونکس کی طرح: - اس کے بعد ایک خط، جیسے -h، یا -- ایک لفظ کے بعد، جیسے --help
  • ونڈوز: / اس کے بعد یا تو ایک حرف، یا لفظ، جیسے /help

یہ مختلف نقطہ نظر تاریخی وجوہات کی بنا پر موجود ہیں۔ یونکس جیسے سسٹمز پر بہت سے پروگرام سنگل اور ڈبل ڈیش نوٹیشن دونوں کو سپورٹ کرتے ہیں۔ سنگل ڈیش نوٹیشن زیادہ تر سنگل لیٹر آپشنز کے ساتھ استعمال ہوتا ہے، جب کہ ڈبل ڈیش زیادہ پڑھنے کے قابل اختیارات کی فہرست پیش کرتے ہیں، جو خاص طور پر پیچیدہ آپشنز کے لیے مفید ہے جن کو زیادہ واضح ہونے کی ضرورت ہے۔

نوٹ: اس مضمون میں ہم مکمل طور پر یونکس جیسے فارمیٹ پر توجہ مرکوز کریں گے۔ - اور --.

ذہن میں رکھیں کہ دلیل کا نام اور معنی دونوں ہی ایک پروگرام کے لیے مخصوص ہیں - چند عام کنونشنز کے علاوہ کوئی عام تعریف نہیں ہے جیسے --help ٹول کے استعمال کے بارے میں مزید معلومات کے لیے۔ Python اسکرپٹ کے ڈویلپر کے طور پر، آپ فیصلہ کریں گے کہ کال کرنے والے کو کون سے دلائل فراہم کیے جائیں اور وہ کیا کریں۔ اس کے لیے مناسب تشخیص کی ضرورت ہے۔

جیسے جیسے آپ کے دستیاب دلائل کی فہرست بڑھتی جائے گی، آپ کا کوڈ ان کو درست طریقے سے پارس کرنے کی کوشش میں مزید پیچیدہ ہو جائے گا۔ خوش قسمتی سے، Python میں اس میں آپ کی مدد کے لیے متعدد لائبریریاں دستیاب ہیں۔ ہم چند عام حلوں کا احاطہ کریں گے، جن کی حد "خود سے کریں" سے لے کر sys.argv، کے ساتھ "آپ کے لیے کیا گیا" نقطہ نظر پر argparse.

Python کے ساتھ کمانڈ لائن دلائل کو ہینڈل کرنا

Python 3+ اور ارد گرد کا ماحولیاتی نظام کمانڈ لائن آرگومنٹس کو ہینڈل کرنے کے متعدد مختلف طریقوں کی حمایت کرتا ہے۔ وہاں ہے بہت سے لائبریریاں جو کمانڈ لائن آرگیومینٹس کو پارس کرنے میں سہولت فراہم کرتی ہیں۔

بلٹ ان طریقہ استعمال کرنا ہے۔ sys ماڈیول ناموں اور اس کے استعمال کے لحاظ سے، اس کا تعلق سی لائبریری سے ہے (libc).

دوسرا طریقہ یہ ہے۔ getopt ماڈیول، جو مختصر اور طویل دونوں آپشنز کو ہینڈل کرتا ہے، بشمول پیرامیٹر کی قدروں کی تشخیص۔

۔ آرگ پارس ماڈیول، جو کہ سے ماخوذ ہے۔ optparse ماڈیول (Python 2.7 تک دستیاب)۔

۔ docopt ماڈیول، جو ہے GitHub پر دستیاب، بھی اسی فعالیت کی اجازت دیتا ہے۔

حال ہی میں، absl لائبریری بھی بدلنے کے ایک ذریعہ کے طور پر بھاپ حاصل کر رہی ہے۔ optparse اور getopt().

ان طریقوں میں سے ہر ایک کے اپنے فائدے اور نقصانات ہیں، لہذا یہ دیکھنے کے لیے ہر ایک کا جائزہ لینے کے قابل ہے کہ کون سا آپ کی ضروریات کے مطابق ہے۔

سیس ماڈیول

یہ ایک بنیادی ماڈیول ہے جو ابتدائی دنوں سے ازگر کے ساتھ بھیج دیا گیا ہے۔ یہ سی لائبریری کا استعمال کرتے ہوئے بہت ہی اسی طرح کا نقطہ نظر لیتا ہے۔ argc/argv دلائل تک رسائی حاصل کرنے کے لیے۔ دی sys ماڈیول کمانڈ لائن کے دلائل کو ایک سادہ فہرست ڈھانچے میں لاگو کرتا ہے جس کا نام ہے۔ sys.argv.

فہرست کا ہر عنصر ایک دلیل کی نمائندگی کرتا ہے۔ فہرست میں پہلی چیز، sys.argv[0]، Python اسکرپٹ کا نام ہے۔ فہرست کے باقی عناصر، sys.argv[1] کرنے کے لئے sys.argv[n], کمانڈ لائن کے دلائل 2 سے n تک ہیں۔

دلائل کے درمیان حد بندی کے طور پر، ایک جگہ استعمال کی جاتی ہے۔ استدلال کی قدریں جن میں اس میں ایک جگہ ہوتی ہے ان کو اقتباسات سے گھیرنا پڑتا ہے تاکہ صحیح طریقے سے تجزیہ کیا جا سکے۔ sys.

کے برابر argc فہرست میں صرف عناصر کی تعداد ہے۔ اس قدر کو حاصل کرنے کے لیے، ازگر کا استعمال کریں۔ len() آپریٹر ہم اسے بعد میں ایک کوڈ مثال میں دکھائیں گے۔

پہلا CLI دلیل پرنٹ کرنا

اس پہلی مثال میں، ہمارا اسکرپٹ اس بات کا تعین کرے گا کہ اسے کس طرح بلایا گیا تھا۔ یہ معلومات پہلی کمانڈ لائن دلیل میں رکھی جاتی ہے، 0 کے ساتھ انڈیکس کیا جاتا ہے۔ نیچے دیا گیا کوڈ دکھاتا ہے کہ آپ اپنے Python اسکرپٹ کا نام کیسے حاصل کرتے ہیں:

import sys

print("The script has the name %s" % (sys.argv[0])

اس کوڈ کو نام کی فائل میں محفوظ کریں۔ arguments-program-name.py، اور پھر اسے کال کریں جیسا کہ نیچے دکھایا گیا ہے۔ آؤٹ پٹ مندرجہ ذیل ہے اور اس میں فائل کا نام ہے، بشمول اس کا پورا راستہ:

$ python arguments-program-name.py
The script has the name arguments-program-name.py
$ python /home/user/arguments-program-name.py
The script has the name /home/user/arguments-program-name.py

جیسا کہ آپ اوپر کی دوسری کال سے دیکھ سکتے ہیں، ہمیں نہ صرف Python فائل کا نام ملتا ہے بلکہ اسے کال کرنے کے لیے استعمال ہونے والا پورا راستہ بھی ملتا ہے۔

دلائل کی تعداد گننا

اس دوسری مثال میں ہم بلٹ ان کا استعمال کرتے ہوئے صرف کمانڈ لائن آرگیومینٹس کی تعداد گنتے ہیں۔ len() طریقہ. sys.argv وہ فہرست ہے جس کی ہمیں جانچ کرنی ہے۔ نیچے دیے گئے کوڈ میں، ہم دلائل کی تعداد حاصل کرتے ہیں اور پھر 1 کو گھٹاتے ہیں کیونکہ ان میں سے ایک دلیل (یعنی پہلا) ہمیشہ فائل کے نام کے طور پر سیٹ کیا جاتا ہے، جو ہمارے لیے ہمیشہ مفید نہیں ہوتا ہے۔ اس طرح، صارف کی طرف سے منظور شدہ دلائل کی اصل تعداد ہے۔ len(sys.argv) - 1:

import sys


arguments = len(sys.argv) - 1
print ("The script is called with %i arguments" % (arguments))

محفوظ کریں اور اس فائل کو arguments-count.py نام دیں۔ اس اسکرپٹ کو کال کرنے کی کچھ مثالیں ذیل میں دکھائی گئی ہیں۔ اس میں تین مختلف منظرنامے شامل ہیں:

  • بغیر کسی کمانڈ لائن دلائل کے کال
  • دو دلائل کے ساتھ ایک کال
  • دو دلائل کے ساتھ ایک کال، جہاں دوسرا ایک کوٹڈ سٹرنگ ہے جس میں اسپیس ہے۔
$ python arguments-count.py
The script is called with 0 arguments
$ python arguments-count.py --help me
The script is called with 2 arguments
$ python arguments-count.py --option "long string"
The script is called with 2 arguments
دلائل کے ذریعے تکرار کرنا

ہماری تیسری مثال Python اسکرپٹ کو بھیجی گئی ہر ایک دلیل کو آؤٹ پٹ کرتی ہے، سوائے پروگرام کے نام کے۔ لہذا، ہم کمانڈ لائن آرگیومینٹس کے ذریعے لوپ کرتے ہیں۔ دوسری فہرست عنصر. یاد رکھیں کہ یہ انڈیکس 1 ہے کیونکہ Python میں فہرستیں 0 پر مبنی ہیں:

import sys


arguments = len(sys.argv) - 1


position = 1
while (arguments >= position):
    print ("Parameter %i: %s" % (position, sys.argv[position]))
    position = position + 1

ذیل میں ہم اپنے کوڈ کو کال کرتے ہیں، جسے arguments-output.py فائل میں محفوظ کیا گیا تھا۔ جیسا کہ ہماری پچھلی مثال کے ساتھ کیا گیا ہے، آؤٹ پٹ تین مختلف کالوں کی وضاحت کرتا ہے:

  • بغیر کسی دلیل کے ایک کال
  • دو دلائل کے ساتھ ایک کال
  • دو دلائل کے ساتھ ایک کال، جہاں دوسری دلیل ایک کوٹڈ سٹرنگ ہے جس میں اسپیس ہے۔
$ python arguments-output.py
$ python arguments-output.py --help me
Parameter 1: --help
Parameter 2: me
$ python arguments-output.py --option "long string"
Parameter 1: --option
Parameter 2: long string

یاد رکھیں، حوالہ کردہ سٹرنگ مثال دکھانے کا نقطہ یہ ہے کہ پیرامیٹرز کو عام طور پر ایک جگہ سے محدود کیا جاتا ہے، جب تک کہ وہ حوالوں سے گھرے ہوئے ہیں۔

ابیسیل جھنڈے (absl)

Abseil's Flags لائبریری کا مقصد کمانڈ لائن آرگیومینٹس کو پروڈکشن میں، تقسیم شدہ کمانڈ لائن دلائل کے ساتھ لانا ہے۔ جب ایک ماڈیول کمانڈ لائن جھنڈوں کا استعمال کرتا ہے، اور اسے دوسرے ماڈیول میں درآمد کیا جاتا ہے - دوسرے ماڈیول جھنڈے بھی درآمد کرتا ہے۔، اور درآمد شدہ ماڈیول پر بھیج کر ان پر کارروائی کر سکتے ہیں۔

یہ ماڈیولز کے درمیان مشترکہ کمانڈ لائن کے پیچیدہ دلائل کو آسان اور کم لفظی بنا دیتا ہے۔

مزید برآں، لائبریری آپ کو دلائل کی ڈیفالٹ اقدار، تفصیل اور ڈیٹا کی قسم کی وضاحت کرنے دیتی ہے، اس لیے اضافی چیک اور تبادلوں کی ضرورت نہیں ہے۔

from absl import flags
import sys


flags.DEFINE_string('name', 'User', 'The name of the user.')


FLAGS = flags.FLAGS
FLAGS(sys.argv)

print(f"Hello {FLAGS.name}!")

معاون اعداد و شمار کی اقسام ہیں:

  • DEFINE_integer()
  • DEFINE_string()
  • DEFINE_bool()
  • DEFINE_enum()
  • DEFINE_list()
  • DEFINE_float()

اس کے ساتھ ساتھ DEFINE_multi_integer(), DEFINE_multi_string() اور DEFINE_multi_enum() کثیر دلیل ان پٹ کے لیے۔ اس کے علاوہ، چل رہا ہے --help, --helpfullوغیرہ موجودہ جھنڈوں اور ان کی تفصیل کو مختلف شکلوں میں پرنٹ کریں۔

بہترین طرز عمل، صنعت کے لیے منظور شدہ معیارات، اور چیٹ شیٹ کے ساتھ Git سیکھنے کے لیے ہمارے ہینڈ آن، عملی گائیڈ کو دیکھیں۔ گوگلنگ گٹ کمانڈز کو روکیں اور اصل میں سیکھ یہ!

لائبریری آپ کو توثیق کی وضاحت کرنے کی بھی اجازت دیتی ہے – دونوں حد کے لحاظ سے، جیسے کہ عدد پر مبنی اقدار upper_bound or lower_bound یہ قابل قبول ہے، اور اقدار کو چیک کرنے کے لیے صوابدیدی طریقے چلا رہے ہیں:

def validate_name(value):
    return len(value) > 15

flags.register_validator('name',
                         validate_name,
                         message='Name is over 15 characters long.',
                         flag_values=FLAGS)

ان کو ایک ٹھوس مثال میں جمع کرنا:

from absl import flags
import sys

flags.DEFINE_string('name', 'User', 'The name of the user.')
flags.DEFINE_integer('tasks', 0, 'The number of tasks a user has.', lower_bound=0)

FLAGS = flags.FLAGS
FLAGS(sys.argv)

print(f"{FLAGS.name} has {FLAGS.tasks} tasks to work on.")
$ python flags.py --name=John --tasks=5
John has 5 tasks to work on.
$ python flags.py --name=John --tasks=-1

Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/absl/flags/_flag.py", line 180, in _parse
    return self.parser.parse(argument)
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/absl/flags/_argument_parser.py", line 168, in parse
    raise ValueError('%s is not %s' % (val, self.syntactic_help))
ValueError: -1 is not a non-negative integer
...

آرگ پارس ماڈیول

۔ آرگ پارس ماڈیول Python 3.2 کے بعد سے دستیاب ہے، اور اس میں اضافہ optparse ماڈیول جو ازگر 2.7 تک موجود ہے۔ Python دستاویزات میں API کی تفصیل اور ایک ٹیوٹوریل شامل ہے جس میں تمام طریقوں کا تفصیل سے احاطہ کیا گیا ہے۔

ماڈیول معیاری آؤٹ پٹ کے ساتھ کمانڈ لائن انٹرفیس پیش کرتا ہے، جبکہ سابقہ ​​دو حل آپ کے ہاتھ میں زیادہ کام چھوڑ دیتے ہیں۔ argparse مقررہ اور اختیاری دلائل کی توثیق کی اجازت دیتا ہے، نام کی جانچ کے ساتھ مختصر یا طویل طرز کے طور پر۔ بطور ڈیفالٹ اختیاری دلیل، اس میں شامل ہے۔ -hاس کے طویل ورژن کے ساتھ --help. یہ دلیل قبول شدہ دلائل کی وضاحت کرنے والے پہلے سے طے شدہ مدد کے پیغام کے ساتھ ہے۔

نیچے کا کوڈ پارسر کی شروعات کو ظاہر کرتا ہے، اور نیچے کا آؤٹ پٹ بنیادی کال کو ظاہر کرتا ہے، اس کے بعد مدد کا پیغام۔ Python کالز کے برعکس جو ہم نے پچھلی مثالوں میں استعمال کی ہیں، ان مثالوں کے ساتھ Python 3 کا استعمال ذہن میں رکھیں:


import argparse


parser = argparse.ArgumentParser()
parser.parse_args()
$ python3 arguments-argparse-basic.py 
$ python3 arguments-argparse-basic.py -h
usage: arguments-argparse-basic.py [-h]

optional arguments:
  -h, --help  show this help message and exit
$ python3 arguments-argparse-basic.py --verbose
usage: arguments-argparse-basic.py [-h]
arguments-argparse-basic.py: error: unrecognized arguments: --verbose

اگلے مرحلے میں، ہم اپنے صارفین کے لیے مدد کے پیغام میں حسب ضرورت وضاحت شامل کریں گے۔ تجزیہ کار کو اس طرح سے شروع کرنے سے اضافی متن کی اجازت ملتی ہے۔ نیچے کا کوڈ تفصیل کو میں محفوظ کرتا ہے۔ text متغیر، جو واضح طور پر دی گئی ہے۔ argparse کلاس کے طور پر description پیرامیٹر اس کوڈ کو نیچے کال کرتے ہوئے، آپ دیکھ سکتے ہیں کہ آؤٹ پٹ کیسا لگتا ہے:


import argparse


text = 'This is a test program. It demonstrates how to use the argparse module with a program description.'


parser = argparse.ArgumentParser(description=text)
parser.parse_args()
$ python3 arguments-argparse-description.py --help
usage: arguments-argparse-description.py [-h]

This is a test program. It demonstrates how to use the argparse module with a
program description.

optional arguments:
  -h, --help  show this help message and exit

آخری مرحلے کے طور پر ہم نام ایک اختیاری دلیل شامل کریں گے۔ -V، جس کا نام ایک طویل طرز کی دلیل ہے۔ --version. ایسا کرنے کے لیے ہم طریقہ استعمال کرتے ہیں۔ add_argument() جسے ہم تین پیرامیٹرز کے ساتھ کال کرتے ہیں (اس کے لیے دکھایا گیا ہے۔ --versionصرف):

  • پیرامیٹر کا نام: --version
  • پیرامیٹر کے لیے مدد کا متن: help="show program version"
  • عمل (اضافی قیمت کے بغیر): action="store_true"

اس کے لیے سورس کوڈ نیچے دکھایا گیا ہے۔ متغیر میں دلائل پڑھنا کہا جاتا ہے۔ args کے ذریعے کیا جاتا ہے۔ parse_args() سے طریقہ parser چیز. نوٹ کریں کہ آپ ایک کال میں مختصر اور طویل دونوں ورژن جمع کراتے ہیں۔ آخر میں، آپ چیک کریں کہ آیا صفات args.V or args.version سیٹ ہیں اور ورژن کا پیغام آؤٹ پٹ کرتے ہیں:


import argparse


parser = argparse.ArgumentParser()
parser.add_argument("-V", "--version", help="show program version", action="store_true")


args = parser.parse_args()


if args.version:
    print("This is myprogram version 0.1")
$ python3 arguments-argparse-optional.py -V
This is myprogram version 0.1
$ python3 arguments-argparse-optional.py --version
This is myprogram version 0.1

۔ --version argument کو کمانڈ لائن پر قیمت دینے کی ضرورت نہیں ہے۔ اس لیے ہم نے کارروائی کی دلیل کو مقرر کیا ہے۔ "store_true". دوسری صورتوں میں آپ کو اضافی تفویض کردہ قدر کی ضرورت ہو سکتی ہے، مثال کے طور پر اگر آپ ایک مخصوص حجم، اونچائی، یا چوڑائی بتاتے ہیں۔ یہ اگلی مثال میں دکھایا گیا ہے۔ پہلے سے طے شدہ کیس کے طور پر، براہ کرم نوٹ کریں کہ تمام دلائل کو تاروں سے تعبیر کیا جاتا ہے:


import argparse


parser = argparse.ArgumentParser()


parser.add_argument("--width", "-w", help="set output width")


args = parser.parse_args()


if args.width:
    print("Set output width to %s" % args.width)

یہاں ہم دکھاتے ہیں کہ جب مختلف آرگیومنٹ ویلیوز جمع کراتے ہیں تو کیا ہوتا ہے۔ اس میں مختصر اور طویل ورژن کے ساتھ ساتھ مدد کا پیغام بھی شامل ہے:

$ python3 arguments-argparse-optional2.py -w 10
Set output width to 10
$ python3 arguments-argparse-optional2.py --width 10
Set output width to 10
$ python3 arguments-argparse-optional2.py -h
usage: arguments-argparse-optional2.py [-h] [--width WIDTH]

optional arguments:
  -h, --help            show this help message and exit
  --width WIDTH, -w WIDTH
                        set output width

گیٹوپٹ ماڈیول

جیسا کہ آپ نے پہلے دیکھا ہوگا، sys ماڈیول کمانڈ لائن سٹرنگ کو صرف ایک پہلوؤں میں تقسیم کرتا ہے۔ ازگر getopt ماڈیول تھوڑا آگے جاتا ہے اور پیرامیٹر کی توثیق کے ذریعہ ان پٹ سٹرنگ کی علیحدگی کو بڑھاتا ہے۔ کی بنیاد پر getopt C فنکشن، یہ مختصر اور طویل دونوں اختیارات کی اجازت دیتا ہے، بشمول ایک ویلیو اسائنمنٹ۔

عملی طور پر، اس کی ضرورت ہے sys ان پٹ ڈیٹا کو صحیح طریقے سے پروسیس کرنے کے لیے ماڈیول۔ ایسا کرنے کے لیے، دونوں sys ماڈیول اور getopt ماڈیول کو پہلے سے لوڈ کرنا ہوگا۔ اس کے بعد، ان پٹ پیرامیٹرز کی فہرست سے ہم فہرست کے پہلے عنصر کو ہٹاتے ہیں (ذیل میں کوڈ دیکھیں)، اور کمانڈ لائن آرگیومینٹس کی بقیہ فہرست کو متغیر میں اسٹور کرتے ہیں۔ argument_list:


import getopt, sys


full_cmd_arguments = sys.argv


argument_list = full_cmd_arguments[1:]

print argument_list

میں دلائل argument_list اب کا استعمال کرتے ہوئے تجزیہ کیا جا سکتا ہے getopts() طریقہ لیکن ایسا کرنے سے پہلے ہمیں یہ بتانا ہوگا۔ getopts() جس کے بارے میں پیرامیٹرز درست ہیں۔ ان کی تعریف اس طرح کی گئی ہے:

short_options = "ho:v"
long_options = ["help", "output=", "verbose"]

اس کا مطلب ہے کہ یہ دلائل وہ ہیں جنہیں ہم درست سمجھتے ہیں، کچھ اضافی معلومات کے ساتھ:

------------------------------------------
long argument   short argument  with value
------------------------------------------
--help           -h              no
--output         -o              yes
--verbose        -v              no
------------------------------------------

آپ نے محسوس کیا ہوگا کہ o مختصر آپشن کو بڑی آنت کے ذریعے آگے بڑھایا گیا، :. یہ بتاتا ہے getopt کہ اس اختیار کو ایک قدر تفویض کی جانی چاہئے۔

یہ اب ہمیں دلائل کی فہرست پر کارروائی کرنے کی اجازت دیتا ہے۔ دی getopt() طریقہ کار کو ترتیب دینے کے لیے تین پیرامیٹرز کی ضرورت ہوتی ہے – سے اصل دلائل کی فہرست argv، نیز درست مختصر اور طویل دونوں اختیارات (پچھلے کوڈ کے ٹکڑوں میں دکھایا گیا ہے)۔

تشخیص کے دوران غلطیوں کا احاطہ کرنے کے لیے طریقہ کال کو ہی ایک ٹرائی کیچ اسٹیٹمنٹ میں رکھا جاتا ہے۔ استثنیٰ اٹھایا جاتا ہے اگر کوئی دلیل دریافت ہو جو فہرست کا حصہ نہیں ہے جیسا کہ پہلے بیان کیا گیا ہے۔ Python اسکرپٹ غلطی کے پیغام کو اسکرین پر پرنٹ کرے گا، اور ایرر کوڈ 2 کے ساتھ باہر نکل جائے گا:

try:
    arguments, values = getopt.getopt(argument_list, short_options, long_options)
except getopt.error as err:
    
    print (str(err))
    sys.exit(2)

آخر میں، متعلقہ اقدار کے ساتھ دلائل نامی دو متغیرات میں محفوظ کیے جاتے ہیں۔ arguments اور values. اب، آپ اپنے کوڈ میں ان متغیرات کو آسانی سے جانچ سکتے ہیں۔ ہم استعمال کر سکتے ہیں a for- تسلیم شدہ دلائل کی فہرست کے ذریعے تکرار کرنے کے لیے لوپ، اگلے کے بعد ایک اندراج۔


for current_argument, current_value in arguments:
    if current_argument in ("-v", "--verbose"):
        print ("Enabling verbose mode")
    elif current_argument in ("-h", "--help"):
        print ("Displaying help")
    elif current_argument in ("-o", "--output"):
        print (("Enabling special output mode (%s)") % (current_value))

ذیل میں آپ اس کوڈ پر عمل درآمد سے آؤٹ پٹ دیکھ سکتے ہیں۔ ہم دکھائیں گے کہ پروگرام درست اور غلط دونوں دلیلوں کے ساتھ کیسے رد عمل ظاہر کرتا ہے:

$ python arguments-getopt.py -h
Displaying help
$ python arguments-getopt.py --help
Displaying help
$ python arguments-getopt.py --output=green --help -v
Enabling special output mode (green)
Displaying help
Enabling verbose mode
$ python arguments-getopt.py -verbose
option -e not recognized

ہمارے پروگرام کے لیے آخری کال شروع میں قدرے الجھن والی لگ سکتی ہے۔ اسے سمجھنے کے لیے، آپ کو یہ جاننے کی ضرورت ہے کہ شارٹ ہینڈ کے اختیارات (کبھی کبھی فلیگ بھی کہا جاتا ہے) کو ایک ہی ڈیش کے ساتھ استعمال کیا جا سکتا ہے۔ یہ آپ کے ٹول کو بہت سے اختیارات کو آسانی سے قبول کرنے کی اجازت دیتا ہے۔ مثال کے طور پر کال کرنا python arguments-getopt.py -vh کال کرنے جیسا ہی ہے۔ python arguments-getopt.py -v -h. تو اوپر آخری کال میں، the getopt ماڈیول نے سوچا کہ صارف گزرنے کی کوشش کر رہا ہے۔ -e ایک اختیار کے طور پر، جو غلط ہے۔

نتیجہ

اس مضمون میں ہم نے Python میں کمانڈ لائن آرگیومینٹس کو بازیافت کرنے کے بہت سے مختلف طریقے دکھائے ہیں، بشمول استعمال کرنا sys, getopt، اور argparse. یہ ماڈیول فعالیت میں مختلف ہوتے ہیں، کچھ دوسروں کے مقابلے میں بہت زیادہ فراہم کرتے ہیں۔ sys مکمل طور پر لچکدار ہے، جبکہ دونوں getoptاور argparse کچھ ساخت کی ضرورت ہے. اس کے برعکس، وہ زیادہ تر پیچیدہ کام کا احاطہ کرتے ہیں۔ sys آپ پر چھوڑتا ہے. فراہم کردہ مثالوں پر کام کرنے کے بعد، آپ کو یہ تعین کرنے کے قابل ہونا چاہیے کہ کون سا ماڈیول آپ کے پروجیکٹ کے لیے بہترین ہے۔

اس مضمون میں ہم نے دوسرے حل کے بارے میں بات نہیں کی جیسے کہ docopts ماڈیول، ہم نے ابھی اس کا ذکر کیا ہے۔ یہ ماڈیول بالکل مختلف نقطہ نظر کی پیروی کرتا ہے، اور اگلے مضامین میں سے ایک میں اس کی تفصیل سے وضاحت کی جائے گی۔

حوالہ جات

ٹائم اسٹیمپ:

سے زیادہ Stackabuse