मैं "--foo True" या "--foo False" के रूप में लिखे गए बूलियन कमांड-लाइन तर्कों को पार्स करने के लिए उपयोग करना चाहूंगा। उदाहरण के लिए:
my_program --my_boolean_flag False
हालाँकि, निम्न परीक्षण कोड वह नहीं करता है जो मैं चाहूंगा:
import argparse
parser = argparse.ArgumentParser(description="My parser")
parser.add_argument("--my_bool", type=bool)
cmd_line = ["--my_bool", "False"]
parsed_args = parser.parse(cmd_line)
दुख की बात है, parsed_args.my_bool
मूल्यांकन करता है True
। जब मैं बदलता हूं, तब भी यही स्थिति होती cmd_line
है ["--my_bool", ""]
, जो कि आश्चर्यजनक है, क्योंकि यह bool("")
विकसित होता है False
।
मैं कैसे argparse पार्स करने के लिए प्राप्त कर सकते हैं "False"
, "F"
, और उनके लोअर केस होने की वेरिएंट False
?
parser.add_argument('--feature', dest='feature', type=lambda x:bool(distutils.util.strtobool(x)))
। जब विकल्प प्रयोग किया जाता है, इसलिए यह समाधान सुनिश्चित करेगा bool
के मूल्य के साथ प्रकार True
या False
। जब विकल्प का उपयोग नहीं किया जाता है तो आपको मिलेगा None
। ( distutils.util.strtobool(x)
एक अन्य स्टैकओवरफ्लो प्रश्न से है )
parser.add_argument('--my_bool', action='store_true', default=False)
parser.add_argument('--feature', dest='feature', default=False, action='store_true')
। यह समाधान की गारंटी होगा आप हमेशा एक मिलbool
मूल्य के साथ प्रकारTrue
याFalse
। (इस समाधान में एक बाधा है: आपके विकल्प का डिफ़ॉल्ट मान होना चाहिए।)