पाइथनमा कमाण्ड लाइन आर्गुमेन्टहरू ह्यान्डल गर्न, sys मोड्युलको argv वा argparse मोड्युलहरू प्रयोग गर्नुहोस्।
argparse मोड्युलले कमाण्ड लाइन आर्गुमेन्टहरूको लचिलो ह्यान्डलिङको लागि अनुमति दिन्छ, तर बुलियन मानहरू (सत्य, गलत) सँग व्यवहार गर्दा सावधानी अपनाउनु पर्छ।
निम्न जानकारी यहाँ प्रदान गरिएको छ।
- तर्क को सजिलो परिभाषा को लागी argparse
- argparse संग तर्क (प्रकार) को प्रकार निर्दिष्ट गर्नुहोस्
- add_argument() को आर्गुमेन्ट प्रकारको रूपमा “बूल” निर्दिष्ट नगर्नुहोस्
- bool () द्वारा निर्णय
- तर्क प्रकार को सट्टा तर्क कार्य प्रयोग गर्नुहोस्।
- strtobool() प्रकार्य प्रयोग गर्दै
तर्क को सजिलो परिभाषा को लागी argparse
argparse मोड्युलले कमांड लाइन तर्कहरू परिभाषित गर्न सजिलो बनाउँछ।
argparse मोड्युलले प्रयोगकर्ता-अनुकूल कमाण्ड लाइन इन्टरफेसहरू सिर्जना गर्न सजिलो बनाउँछ। तपाइँ तपाइँको कार्यक्रम को आवश्यकता को तर्कहरु लाई परिभाषित गर्नुहोस्, र argparse ले sys.argv बाट ती विकल्पहरु कसरी पार्स गर्ने भनेर पत्ता लगाउनेछ। argparse मोड्युलले स्वचालित रूपमा मद्दत र प्रयोग सन्देशहरू उत्पन्न गर्दछ, र प्रयोगकर्ताले कार्यक्रममा अमान्य तर्कहरू निर्दिष्ट गरेमा त्रुटि उठाउँदछ। प्रयोगकर्ताले कार्यक्रममा अमान्य तर्कहरू निर्दिष्ट गर्दा त्रुटि।
argparse — Parser for command-line options, arguments and sub-commands — Python 3.10.0 Documentation
argparse संग तर्क (प्रकार) को प्रकार निर्दिष्ट गर्नुहोस्
argparse को एक उपयोगी विशेषता प्रकार (प्रकार) निर्दिष्ट गर्नु हो।
उदाहरणका लागि, यदि तपाईंले पूर्णांक (int) प्रकार निर्दिष्ट गर्नुभयो भने, यसले स्वचालित रूपमा तर्कलाई int मा रूपान्तरण गर्नेछ र int नभएका तर्कहरूको लागि त्रुटि पनि खडा गर्नेछ।
प्रकार add_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))
कमांड लाइनबाट यो फाइल चलाउनुहोस्।
$ python argparse_type_int.py 100
100
<type 'int'>
तर्क 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() को आर्गुमेन्ट प्रकारको रूपमा “बूल” निर्दिष्ट नगर्नुहोस्
यदि तपाईंले add_argument() को आर्गुमेन्ट प्रकारको रूपमा bool निर्दिष्ट गर्नुभयो भने int र float जस्ता bool ले अपेक्षित रूपमा काम गर्दैन भन्ने कुरा नोट गर्न महत्त्वपूर्ण छ।
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))
कमांड लाइनबाट यो फाइल चलाउनुहोस्।
$ python argparse_type_bool.py True
True
<type 'bool'>
यदि true लाई तर्कको रूपमा प्रयोग गरिन्छ भने, यो bool type true को रूपमा पढिनेछ। यो अपेक्षित व्यवहार हो, तर समस्या निम्न अवस्थामा छ।
$ python argparse_type_bool.py False
True
<type 'bool'>
$ python argparse_type_bool.py bar
True
<type 'bool'>
यदि तपाइँ तर्कको रूपमा गलत वा कुनै अन्य स्ट्रिङ प्रयोग गर्नुहुन्छ भने, यो सत्यको रूपमा पढिनेछ।
यो हुनुको कारण यो हो कि जब type=xxx add_argument() मा निर्दिष्ट गरिएको छ, तर्क xxx() मा पास हुन्छ।
उदाहरण को लागी, यदि type=int, आर्गुमेन्ट लाई int(); यदि type=float, त्यसपछि float()।
टाइप=बूलको लागि पनि यही कुरा सत्य हो, जसको अर्थ आर्गुमेन्ट bool() मा पठाइनेछ।
bool () द्वारा निर्णय
यो bool() एक कठिन छ।
- bool() — Built-in Functions — Python 3.10.0 Documentation
- Truth Value Testing — Built-in Types — Python 3.10.0 Documentation
निम्न मानहरू गलत मानिन्छन्:
- None
- false
- संख्यात्मक प्रकारहरूमा शून्य। उदाहरणका लागि, निम्न मानहरू
- 0
- 0
- 0j
- एक खाली क्रम। उदाहरणका लागि
- ‘
- ()
- []
- खाली म्यापिङ। उदाहरणका लागि
- {}
अन्य सबै मानहरू सत्य मानिन्छन् – यसरी धेरै प्रकारका वस्तुहरू सधैँ सत्य हुन्छन्। बुलियन नतिजाहरू फिर्ता गर्ने अपरेशनहरू र बिल्ट-इन प्रकार्यहरूले सधैं 0 वा False लाई गलत मानको रूपमा र 1 वा True साँचो मानको रूपमा फर्काउँछ, अन्यथा उल्लेख नगरेसम्म।
त्यसैले, bool() मा पास गरिएका सबै गैर-खाली स्ट्रिङहरू, चाहे ‘true’ वा ‘false’, true फर्किनेछ। खाली स्ट्रिङहरू मात्र गलत हुनेछन्।
print(bool('True'))
print(bool('False'))
print(bool('abc'))
# True
# True
# True
print(bool(''))
# False
जब type=bool add_argument() मा सेट हुन्छ, आर्गुमेन्ट bool() मा पास हुन्छ। त्यसकारण, माथिको उदाहरणमा देखाइए अनुसार, यदि false लाई तर्कको रूपमा प्रयोग गरिन्छ भने, यसलाई bool() स्ट्रिङ ‘False’ को रूपमा रूपान्तरण गरी true को रूपमा पढिनेछ।
तर्क प्रकार को सट्टा तर्क कार्य प्रयोग गर्नुहोस्।
यदि तपाइँ argparse मा बुलियन मानहरू प्रयोग गर्न चाहनुहुन्छ भने, तर्क कार्यको लागि ‘store_true’ वा ‘store_false’ निर्दिष्ट गर्नुहोस्।
- store_true’
- store_false’
यी ‘store_const’ को विशेष संस्करणहरू हुनेछन् जसले क्रमशः True र False भण्डार गर्नेछ। थप रूपमा, तिनीहरूले पूर्वनिर्धारित मानहरूलाई क्रमशः 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 लाई सत्यको रूपमा सेट गरिएको छैन भने, यो गलत रूपमा लोड हुनेछ, जुन en को पूर्वनिर्धारित मान हो।
$ python argparse_option_bool.py --en
True
<type 'bool'>
$ python argparse_option_bool.py
False
<type 'bool'>
यदि तपाइँ पूर्वनिर्धारितलाई true मा सेट गर्न चाहनुहुन्छ भने, र विकल्प थपिएको बेला false मा, केवल निम्न गर्नुहोस्।action='store_false'
strtobool() प्रकार्य प्रयोग गर्दै
यदि तपाइँ विकल्पहरूको सट्टा स्थितित्मक तर्कहरू प्रयोग गर्न चाहनुहुन्छ भने, तपाइँ प्रकार्य strtobool() प्रयोग गर्न सक्नुहुन्छ।
strtobool() एउटा प्रकार्य हो जसले स्ट्रिङलाई true (1) वा false (0) मा रूपान्तरण गर्छ।
बुलियन स्ट्रिङलाई सत्य (१) वा गलत (०) मा रूपान्तरण गर्छ।
वास्तविक मूल्यहरू निम्नानुसार छन्
yyestrueon1गलत मानहरू निम्नानुसार छन्।
nnoffalseoff0यदि val माथिको कुनै पनि होइन भने, यसले ValueError लाई बढाउँछ।
9. API Reference – strtobool() — Python 3.10.0 Documentation
यो केस संवेदनशील छैन, त्यसैले उदाहरण को लागी, तपाइँ निम्न प्रयोग गर्न सक्नुहुन्छ; कुनै पनि अन्य स्ट्रिङ त्रुटिको परिणाम हुनेछ।
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'>
पहिले लेखिए जस्तै, जब टाइप=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 हो, तर यसले तर्कको रूपमा true वा false मानहरू पढ्न सक्छ।
$ 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'


