मैं "--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। (इस समाधान में एक बाधा है: आपके विकल्प का डिफ़ॉल्ट मान होना चाहिए।)