Python ၏ argparse ရှိ Boolean တန်ဖိုးများကို ကိုင်တွယ်ရာတွင် သတိထားပါ။

စီးပွားရေးလုပ်ငန်း

Python ရှိ command line arguments များကို ကိုင်တွယ်ရန်၊ sys module ၏ argv သို့မဟုတ် argparse modules ကို အသုံးပြုပါ။

argparse module သည် command line arguments များကို လိုက်လျောညီထွေစွာ ကိုင်တွယ်နိုင်စေရန် ခွင့်ပြုသော်လည်း Boolean တန်ဖိုးများ (မှန်၊ မမှန်) နှင့် ကိုင်တွယ်ရာတွင် ဂရုပြုရပါမည်။

အောက်ပါအချက်အလက်များကို ဤနေရာတွင် ဖော်ပြပေးထားပါသည်။

  • အငြင်းအခုံများ၏ လွယ်ကူသော အဓိပ္ပါယ်ဖွင့်ဆိုချက်များအတွက် argparse
  • argument ၏ အမျိုးအစား (type) ကို argparse ဖြင့် သတ်မှတ်ပါ။
  • add_argument() ၏ argument အမျိုးအစားအဖြစ် “ bool” ကို မသတ်မှတ်ပါနှင့်
  • bool() ဖြင့် တရားစီရင်ခြင်း
  • argument type အစား argument action ကိုသုံးပါ။
  • strtobool() လုပ်ဆောင်ချက်ကို အသုံးပြုခြင်း။

အငြင်းအခုံများ၏ လွယ်ကူသော အဓိပ္ပါယ်ဖွင့်ဆိုချက်များအတွက် argparse

argparse module သည် command line arguments များကို သတ်မှတ်ရန် လွယ်ကူစေသည်။

argparse module သည် အသုံးပြုသူနှင့် အဆင်ပြေသော command line interfaces များကို ဖန်တီးရန် လွယ်ကူစေသည်။ သင့်ပရိုဂရမ်အတွက် လိုအပ်သည့် အကြောင်းပြချက်များကို သင်သတ်မှတ်ပေးမည်ဖြစ်ပြီး၊ argparse သည် ထိုရွေးချယ်မှုများကို sys.argv မှ မည်သို့ခွဲခြမ်းစိတ်ဖြာရမည်ကို သိရှိနိုင်မည်ဖြစ်သည်။ argparse module သည် အကူအညီနှင့် အသုံးပြုမှုစာတိုများကို အလိုအလျောက်ထုတ်ပေးပြီး ပရိုဂရမ်အတွက် အသုံးပြုသူမှ မမှန်ကန်သော အကြောင်းပြချက်များကို သတ်မှတ်ပါက အမှားအယွင်းတစ်ခု ပေါ်ပေါက်စေသည်။ အသုံးပြုသူက ပရိုဂရမ်အတွက် မမှန်ကန်သော အကြောင်းပြချက်များကို သတ်မှတ်သည့်အခါ အမှားအယွင်းဖြစ်သည်။
argparse — Parser for command-line options, arguments and sub-commands — Python 3.10.0 Documentation

argument ၏ အမျိုးအစား (type) ကို argparse ဖြင့် သတ်မှတ်ပါ။

Argparse ၏ အသုံးဝင်သောအင်္ဂါရပ်မှာ အမျိုးအစား (type) ကို သတ်မှတ်ခြင်းဖြစ်သည်။

ဥပမာအားဖြင့်၊ သင်သည် ကိန်းပြည့် (int) အမျိုးအစားကို သတ်မှတ်ပါက၊ ၎င်းသည် အကြောင်းပြချက်ကို int အဖြစ် အလိုအလျောက် ပြောင်းလဲပေးမည်ဖြစ်ပြီး int မဟုတ်သော အကြောင်းပြချက်များအတွက် အမှားတစ်ခုကိုလည်း မြှင့်တင်ပေးမည်ဖြစ်သည်။

အမျိုးအစားကို add_argument() ၏ argument အမျိုးအစားဖြင့် သတ်မှတ်ထားပါသည်။

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('arg_int', type=int)

args = parser.parse_args()
print(args.arg_int)
print(type(args.arg_int))

ဤဖိုင်ကို command line မှ run ပါ။

$ python argparse_type_int.py 100
100
<type 'int'>

Argument 100 ကို int အဖြစ် ဖတ်သည်။

int မဟုတ်သောတန်ဖိုးကို အငြင်းအခုံတစ်ခုအဖြစ် အသုံးပြုပါက အမှားအယွင်းတစ်ခု ဖြစ်ပေါ်လိမ့်မည်။

$ python argparse_type_int.py foo
usage: argparse_type_int.py [-h] arg_int
argparse_type_int.py: error: argument arg_int: invalid int value: 'foo'

$ python argparse_type_int.py 1.23
usage: argparse_type_int.py [-h] arg_int
argparse_type_int.py: error: argument arg_int: invalid int value: '1.23'

မမျှော်လင့်ထားသော ငြင်းခုံမှုများကို ကစားရန် အလွန်အသုံးဝင်သည်။

add_argument() ၏ argument အမျိုးအစားအဖြစ် “ bool” ကို မသတ်မှတ်ပါနှင့်

bool ကို add_argument() ၏ argument အမျိုးအစားအဖြစ် သတ်မှတ်ပါက bool သည် int နှင့် float ကဲ့သို့ အလုပ်မဖြစ်ကြောင်း မှတ်သားထားရန် အရေးကြီးပါသည်။

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('arg_bool', type=bool)

args = parser.parse_args()
print(args.arg_bool)
print(type(args.arg_bool))

ဤဖိုင်ကို command line မှ run ပါ။

$ python argparse_type_bool.py True
True
<type 'bool'>

true ကို argument အဖြစ်သုံးပါက bool type true အဖြစ် ဖတ်ပါမည်။ ဤသည်မှာ မျှော်လင့်ထားသည့် အပြုအမူဖြစ်သော်လည်း ပြဿနာမှာ အောက်ပါကိစ္စရပ်ဖြစ်သည်။

$ python argparse_type_bool.py False
True
<type 'bool'>

$ python argparse_type_bool.py bar
True
<type 'bool'>

အငြင်းအခုံအဖြစ် false သို့မဟုတ် အခြားစာကြောင်းတစ်ခုခုကို အသုံးပြုပါက၊ ၎င်းကို true အဖြစ် ဖတ်ပါမည်။

ထိုသို့ဖြစ်ရခြင်းအကြောင်းရင်းမှာ add_argument() တွင် type=xxx ကိုသတ်မှတ်ထားသောအခါ argument သည် xxx() သို့ရောက်ရှိသွားသောကြောင့်ဖြစ်သည်။

ဥပမာ၊ type=int ဆိုရင်၊ argument ကို int(); type=float ဆိုရင် float()။

type=bool အတွက် အလားတူဖြစ်သည်၊ ဆိုလိုသည်မှာ argument ကို bool() သို့ ကူးသွားမည်ဖြစ်သည်။

bool() ဖြင့် တရားစီရင်ခြင်း

ဤ bool() သည် ဆန်းကျယ်သော အရာတစ်ခုဖြစ်သည်။

အောက်ပါတန်ဖိုးများကို မှားယွင်းသည်ဟု ယူဆပါသည်-

  • None
  • false
  • ဂဏန်းအမျိုးအစားများတွင် သုည။ ဥပမာအားဖြင့်၊ အောက်ပါတန်ဖိုးများ
    • 0
    • 0
    • 0j
  • အလွတ်အစည်းတစ်ခု။ ဥပမာ
    • ()
    • []
  • ဗလာမြေပုံ။ ဥပမာ
    • {}

အခြားတန်ဖိုးများအားလုံးသည် မှန်သည်ဟု ယူဆသည် – ထို့ကြောင့် အမျိုးအစားများစွာရှိသော အရာဝတ္ထုများသည် အမြဲမှန်ပါသည်။ Boolean ရလဒ်များကို အမြဲပြန်ပေးသည့် လည်ပတ်မှုများနှင့် ပါ၀င်သည့်လုပ်ဆောင်ချက်များသည် မှားယွင်းသောတန်ဖိုးအဖြစ် 0 သို့မဟုတ် False နှင့် 1 သို့မဟုတ် True ကို အခြားနည်းဖြင့်မှတ်သားထားခြင်းမရှိပါက စစ်မှန်သောတန်ဖိုးအဖြစ် အမြဲတမ်းပြန်လာပါသည်။

ထို့ကြောင့်၊ ‘မှန်’ သို့မဟုတ် ‘false’ ပဲဖြစ်ဖြစ် bool() သို့ ဖြတ်သွားသော ဗလာမဟုတ်သော ကြိုးများအားလုံးသည် အမှန်အတိုင်း ပြန်ဖြစ်သွားပါလိမ့်မည်။ ကြိုးအလွတ်များသာ လွဲမှားနေပါမည်။

print(bool('True'))
print(bool('False'))
print(bool('abc'))
# True
# True
# True

print(bool(''))
# False

type=bool ကို add_argument() တွင် သတ်မှတ်သောအခါ၊ argument သည် bool() သို့ ကူးပြောင်းသွားပါသည်။ ထို့ကြောင့် အထက်ဖော်ပြပါ ဥပမာတွင် ပြထားသည့်အတိုင်း အမှားကို အငြင်းအခုံအဖြစ် အသုံးပြုပါက ၎င်းကို ‘False’ စာကြောင်းအဖြစ် bool() ဖြင့် ပြောင်းလဲပြီး true အဖြစ် ဖတ်မည်ဖြစ်ပါသည်။

argument type အစား argument action ကိုသုံးပါ။

argparse တွင် Boolean တန်ဖိုးများကို သင်အသုံးပြုလိုပါက၊ အကြောင်းပြချက်လုပ်ဆောင်ချက်အတွက် ‘store_true’ သို့မဟုတ် ‘store_false’ ကို သတ်မှတ်ပါ။

  • store_true’
  • store_false’

၎င်းတို့သည် True နှင့် False အသီးသီး သိမ်းဆည်းမည့် ‘store_const’ ၏ အထူးဗားရှင်းများ ဖြစ်ပါမည်။ ထို့အပြင်၊ ၎င်းတို့သည် ၎င်းအစီအစဥ်အတိုင်း ပုံသေတန်ဖိုးများကို False နှင့် True အသီးသီး သတ်မှတ်ပေးမည်ဖြစ်သည်။
argparse — Parser for command-line options, arguments and sub-commands — Python 3.10.0 Documentation

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('--en', action='store_true')

args = parser.parse_args()
print(args.en)
print(type(args.en))

ဤဥပမာတွင်၊ အောက်ပါရွေးချယ်စရာများကိုပေးထားသည်။
--enထို့ကြောင့် en သည် true အဖြစ်မသတ်မှတ်ပါက၊ ၎င်းသည် en ၏မူလတန်ဖိုးဖြစ်သည့် false အဖြစ် loaded ဖြစ်လိမ့်မည်။

$ python argparse_option_bool.py --en
True
<type 'bool'>

$ python argparse_option_bool.py
False
<type 'bool'>

ရွေးချယ်ခွင့်ကို ပေါင်းထည့်သောအခါတွင် သင်သည် default ကို true အဖြစ် သတ်မှတ်လိုပါက၊ အောက်ပါတို့ကို လုပ်ဆောင်ပါ။
action='store_false'

strtobool() လုပ်ဆောင်ချက်ကို အသုံးပြုခြင်း။

ရွေးချယ်စရာများအစား positional arguments ကိုသုံးလိုပါက၊ function strtobool() ကိုသုံးနိုင်သည်။

strtobool() သည် string တစ်ခုအား true (1) သို့မဟုတ် false (0) သို့ ပြောင်းပေးသည့် function တစ်ခုဖြစ်သည်။

Boolean စာကြောင်းကို true (1) သို့မဟုတ် false (0) သို့ ပြောင်းသည်။
စစ်မှန်သောတန်ဖိုးများမှာ အောက်ပါအတိုင်းဖြစ်သည်။

  • y
  • yes
  • true
  • on
  • 1

မှားယွင်းသောတန်ဖိုးများမှာ အောက်ပါအတိုင်းဖြစ်သည်။

  • n
  • no
  • f
  • false
  • off
  • 0

val သည် အထက်ဖော်ပြပါများထဲမှ မဟုတ်ပါက ValueError တက်လာပါသည်။

9. API Reference – strtobool() — Python 3.10.0 Documentation

၎င်းသည် ဖြစ်ရပ်မှန်မဟုတ်ပါ၊ ထို့ကြောင့် ဥပမာအားဖြင့် သင်သည် အောက်ပါတို့ကို အသုံးပြုနိုင်သည်။ အခြား string တစ်ခုခုသည် error ဖြစ်လိမ့်မည်။

  • TRUE'
  • True'
  • YES'
from distutils.util import strtobool

print(strtobool('true'))
print(strtobool('True'))
print(strtobool('TRUE'))
# 1
# 1
# 1

print(strtobool('t'))
print(strtobool('yes'))
print(strtobool('y'))
print(strtobool('on'))
print(strtobool('1'))
# 1
# 1
# 1
# 1
# 1

print(strtobool('false'))
print(strtobool('False'))
print(strtobool('FALSE'))
# 0
# 0
# 0

print(strtobool('f'))
print(strtobool('no'))
print(strtobool('n'))
print(strtobool('off'))
print(strtobool('0'))
# 0
# 0
# 0
# 0
# 0

# print(strtobool('abc'))
# ValueError: invalid truth value 'abc'

အမည်မှာ strtobool() ဖြစ်သော်လည်း ပြန်ပေးသည့်တန်ဖိုးမှာ bool မဟုတ်သော်လည်း int (1 သို့မဟုတ် 0) ဖြစ်သည်။

print(type(strtobool('true')))
# <class 'int'>

အစောပိုင်းတွင်ရေးထားသည့်အတိုင်း၊ type=xxx ကို argparse ၏ add_argument() တွင်သတ်မှတ်သောအခါ၊ argument ကို xxx() သို့ကူးသွားမည်ဖြစ်သည်။ ထို့ကြောင့်၊ ကျွန်ုပ်တို့သည် အောက်ပါတို့ကို လုပ်ဆောင်နိုင်သည်။
type=strtobool

import argparse
from distutils.util import strtobool

parser = argparse.ArgumentParser()
parser.add_argument('arg_bool', type=strtobool)

args = parser.parse_args()
print(args.arg_bool)
print(type(args.arg_bool))

ပြန်ပေးသည့်တန်ဖိုးသည် bool အမျိုးအစားမဟုတ်ဘဲ int အမျိုးအစား 1 သို့မဟုတ် 0 ဖြစ်သည်၊ သို့သော် ၎င်းသည် မှန်ကန်သော သို့မဟုတ် မှားသောတန်ဖိုးများကို ငြင်းခုံမှုများအဖြစ် မှန် သို့မဟုတ် မှားဖြင့် ဖတ်နိုင်သည်။

$ python argparse_type_strtobool.py true
1
<type 'int'>

$ python argparse_type_strtobool.py false
0
<type 'int'>

ထို့အပြင်၊ အငြင်းအခုံကို မျှော်လင့်မထားပါက၊ အမှားအယွင်းတစ်ခုကို မှန်ကန်စွာထုတ်ပေးလိမ့်မည်။

$ python argparse_type_strtobool.py bar
usage: argparse_type_strtobool.py [-h] arg_bool
argparse_type_strtobool.py: error: argument arg_bool: invalid strtobool value: 'bar'
Copied title and URL