Ji bo birêvebirina argumanên rêzika fermanê di Python de, modulên argv an argparse yên modula sys bikar bînin.
Modula argparse rê dide rêwerzkirina maqûl a argumanên rêza fermanê, lê dema ku bi nirxên Boolean re mijûl dibe (rast, xelet) divê baldar be.
Agahiyên jêrîn li vir têne pêşkêş kirin.
- argparse ji bo pênase hêsan a argumanan
- Bi argparse cureyê argumana (cure) diyar bike
- “bool” wekî cureya argumana add_argument() diyar neke
- Dadgehkirina bi bool ()
- Li şûna cureyê arguman, çalakiya argumanê bikar bînin.
- Bi kar anîna fonksiyona strtobool().
argparse ji bo pênase hêsan a argumanan
Modula argparse danasîna argumanên rêzika fermanê hêsan dike.
Modula argparse çêkirina navgînên rêzika fermanê-user-dostane hêsan dike. Hûn diyar dikin ka bernameya we çi argumanan hewce dike, û argparse dê çawa wan vebijarkan ji sys.argv pars bike. Modula argparse bixweber peyamên arîkariyê û karanîna çêdike, û heke bikarhêner argumanên nederbasdar ji bernameyê re diyar bike, xeletiyek derdixe holê. çewtî dema ku bikarhêner argumanên nederbasdar ji bernameyê re diyar dike.
argparse — Parser for command-line options, arguments and sub-commands — Python 3.10.0 Documentation
Bi argparse cureyê argumana (cure) diyar bike
Taybetmendiyek kêrhatî ya argparse ev e ku celeb (cure) diyar bike.
Mînakî, heke hûn celebek yekjimar (int) diyar bikin, ew ê bixweber argumanê veguherîne int û ji bo argumanên ku ne int jî xeletiyek derxe.
Tîp ji hêla argumana add_argument() ve tê destnîşankirin.
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))
Vê pelê ji rêzika fermanê bimeşînin.
$ python argparse_type_int.py 100
100
<type 'int'>
Argumenta 100 wekî hundur tê xwendin.
Ger nirxek ne-int wekî arguman were bikar anîn, dê xeletiyek çêbibe.
$ 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'
Ji bo lîstina argumanên nediyar pir bikêr e.
“bool” wekî cureya argumana add_argument() diyar neke
Girîng e ku hûn bala xwe bidinê ku bool, mîna int û float, dê wekî ku tê hêvî kirin nexebite heke hûn bool wekî celebê argumana add_argument() destnîşan bikin.
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))
Vê pelê ji rêzika fermanê bimeşînin.
$ python argparse_type_bool.py True
True
<type 'bool'>
Ger rast wekî arguman were bikar anîn, ew ê wekî celebek bool rast were xwendin. Ev behreya çaverêkirî ye, lê pirsgirêk rewşa jêrîn e.
$ python argparse_type_bool.py False
True
<type 'bool'>
$ python argparse_type_bool.py bar
True
<type 'bool'>
Ger hûn xelet an rêzek din wekî arguman bikar bînin, ew ê wekî rast were xwendin.
Sedema ku ev diqewime ev e ku dema ku type=xxx di add_argument() de tê diyar kirin, arguman ji xxx() re derbas dibe.
Mînakî, heke type=int, arguman dê derbasî int(); eger type=float, wê demê float().
Heman tişt ji bo type=bool jî rast e, ku tê vê wateyê ku arguman dê derbasî bool() bibe.
Dadgehkirina bi bool ()
Ev bool() yekî dijwar e.
- bool() — Built-in Functions — Python 3.10.0 Documentation
- Truth Value Testing — Built-in Types — Python 3.10.0 Documentation
Nirxên jêrîn xelet têne hesibandin:
- None
- false
- Di cureyên hejmarî de sifir. Ji bo nimûne, nirxên jêrîn
- 0
- 0
- 0j
- Rêzek vala. Bo nimûne
- ‘
- ()
- []
- Nexşeya vala. Bo nimûne
- {}
Hemî nirxên din rast têne hesibandin – bi vî rengî tiştên pir celeb her gav rast in. Karûbar û fonksiyonên çêkirî yên ku encamên Boolean vedigerînin her gav 0 an False wekî nirxa xelet û 1 an Rast wekî nirxa rastîn vedigerînin, heya ku wekî din neyê destnîşan kirin.
Ji ber vê yekê, hemî rêzikên ne vala yên bool(), çi ‘rast’ be çi ‘derew’, dê rast vegere. Tenê rêzikên vala dê derewîn bin.
print(bool('True'))
print(bool('False'))
print(bool('abc'))
# True
# True
# True
print(bool(''))
# False
Dema ku type=bool di add_argument() de tê danîn, arguman ji bool (). Ji ber vê yekê, wekî ku di mînaka li jor de tê xuyang kirin, heke xelet wekî arguman were bikar anîn, ew ê ji hêla bool() ve wekî rêzika ‘False’ were veguheztin û wekî rast were xwendin.
Li şûna cureyê arguman, çalakiya argumanê bikar bînin.
Heke hûn dixwazin di argparse de nirxên Boolean bikar bînin, ji bo çalakiya argumanê ‘store_true’ an ‘store_false’ diyar bikin.
- store_true’
- store_false’
Ew ê guhertoyên taybetî yên ‘store_const’ bin ku dê bi rêzdarî Rast û Derew hilînin. Digel vê yekê, ew ê bi wê rêzê, nirxên xwerû bi rêzdarî li False û True destnîşan bikin.
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))
Di vê nimûneyê de, vebijarkên jêrîn têne dayîn.--en
Ji ber vê yekê, heke en wekî rast neyê danîn, ew ê wekî xelet were barkirin, ku nirxa xwerû ya en e.
$ python argparse_option_bool.py --en
True
<type 'bool'>
$ python argparse_option_bool.py
False
<type 'bool'>
Heke hûn dixwazin dema ku vebijark tê zêdekirin pêşnumayê rast bikin, û xelet bikin, tenê jêrîn bikin.action='store_false'
Bi kar anîna fonksiyona strtobool().
Heke hûn dixwazin li şûna vebijarkan argumanên pozîsyonê bikar bînin, hûn dikarin fonksiyona strtobool() jî bikar bînin.
strtobool() fonksiyonek e ku rêzek diguherîne rast (1) an xelet (0).
Rêzek boolean vediguherîne rast (1) an xelet (0).
Nirxên rastîn wiha ne
y
yes
true
on
1
Nirxên derewîn wiha ne.
n
no
f
false
off
0
Ger val ne yek ji yên jorîn be, ew ValueError zêde dike.
9. API Reference – strtobool() — Python 3.10.0 Documentation
Ew ne hestiyar e, ji ber vê yekê, mînakî, hûn dikarin jêrîn bikar bînin; her stringek din dê bibe sedema xeletiyekê.
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'
Nav strtobool (), lê nirxa vegerê ne bool, lê int (1 an 0) ye.
print(type(strtobool('true')))
# <class 'int'>
Wekî ku berê hatî nivîsandin, dema ku type=xxx di add_argument() ya argparse de were destnîşan kirin, dê arguman ji xxx() re were derbas kirin. Ji ber vê yekê, em dikarin jêrîn bikin.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))
Nirxa vegerê ne celebek boolê ye, lê celebek int 1 an 0 ye, lê ew dikare nirxên rast an xelet bi rast an xelet wekî argumanan bixwîne.
$ python argparse_type_strtobool.py true
1
<type 'int'>
$ python argparse_type_strtobool.py false
0
<type 'int'>
Di heman demê de, heke arguman neyê hêvî kirin, dê xeletiyek bi rêkûpêk çêbibe.
$ 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'