मैं एक argparse.ArgumentParser वस्तु से वैश्विक विकल्पों का उपयोग करने ओवरराइड/एक उप आदेश के लिए चूक मान बढ़ाने के लिए सक्षम होने के लिए चाहते हैं के माध्यम से उप आदेश चूक बढ़ाने।argparse वैश्विक विकल्प
एक उदाहरण होगा हो कि दिखाया गया है मदद वैश्विक अद्यतन, यानी, निम्नलिखित खिलौना उदाहरण के लिए दर्शाता है:
import argparse
import os
import sys
# Global parser and options.
parser = argparse.ArgumentParser(
formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser.add_argument("--user",
dest="user",
default=os.environ.get("USER"),
help="Override the setting of the $USER variable.")
# Sub-command parser and options.
subparsers = parser.add_subparsers()
command = subparsers.add_parser(
"command",
formatter_class=argparse.ArgumentDefaultsHelpFormatter)
command.add_argument("--config",
dest="config",
default="~%s/config" % os.environ.get("USER"),
help="The config file.")
options = parser.parse_args()
आदर्श रूप में जब मैं मिलेगा जब मैं मदद के मोड में इस चलाने के लिए,
> python example.py --user thing command --help
usage: example.py command [-h] [--config CONFIG]
optional arguments:
-h, --help show this help message and exit
--config CONFIG The config file. (default: ~thing/config)
यानी, कॉन्फ़िगर फ़ाइल पथ उपयोगकर्ता विशिष्ट (चीज़) है। मुझे एहसास है कि मैं "~%(user)s/config"
होने के लिए डिफ़ॉल्ट कॉन्फ़िगरेशन को बदल सकता हूं और फिर विकल्प नामस्थान के साथ रन-टाइम पर इसे हल कर सकता हूं, हालांकि मैं सहायता को और अधिक स्पष्ट होना चाहता हूं।
मैं, इकट्ठा कोई वैकल्पिक समाधान, एक बार तर्क पार्स करने के लिए वैश्विक विकल्प प्राप्त करने के लिए प्रयास करने के लिए अर्थात होगा
if "--help" in sys.argv:
# Parse the command minus the help to obtain the global options.
args = sys.argv[1:]
args.remove("--help")
# Update the defaults with the global options.
options = parser.parse_args(args)
command.set_defaults(config="~%s/config" % options.user)
# Re-parse the options.
parser.parse_args()
हालांकि यह कुछ हद तक hacky लगता है। क्या कोई बेहतर दृष्टिकोण/समाधान है?
प्रतिक्रिया के लिए धन्यवाद। यह दृष्टिकोण निश्चित रूप से मेरे दृष्टिकोण से अधिक स्वच्छ/सरल है और एक दृष्टिकोण के समान मैं बिना किसी तर्क के कोशिश कर रहा था, यानी तर्कों को दो बार विश्लेषण करना। मैं यह देखने के लिए कोड देख सकता हूं कि मैं विकल्प के साथ वापस लौटने के लिए parse_known_args() कैसे प्राप्त कर सकता हूं (बाहर निकलने के विपरीत) जब "--help" तर्क मेरे उदाहरण के अनुसार इसे हटाने के बजाय प्रदान किया जाता है। – John
ओह, मैं इसके बारे में भूल गया। आप 'SystemExit' अपवाद को पकड़ सकते हैं कि 'parse_known_args()' फेंक देगा जब यह' ArgumentParser.exit' (जो 'sys.exit' के आसपास अपेक्षाकृत पतला रैपर होता है) फेंक देगा। – chepner
अरे, हाँ मैंने कोशिश की है, हालांकि कोशिश/छोड़कर समस्या यह है कि विकल्प अपरिभाषित हैं। – John