अद्यतन: इस उत्तर में अभी भी समस्याएँ हैं; उदाहरण के लिए, यह required
तर्कों को संभाल नहीं सकता है, और एक अजीब विन्यास वाक्यविन्यास की आवश्यकता है। इसके बजाय, configArgParse को लगता है कि यह प्रश्न वास्तव में क्या पूछता है, और एक पारदर्शी, ड्रॉप-इन प्रतिस्थापन है।
वर्तमान के साथ एक समस्या यह है कि यह त्रुटि नहीं करेगा यदि कॉन्फ़िगरेशन फ़ाइल में तर्क अमान्य हैं। यहां एक अलग नकारात्मक पहलू के साथ एक संस्करण है: आपको कुंजियों में --
या -
उपसर्ग को शामिल करने की आवश्यकता होगी ।
यहाँ अजगर कोड ( एमआईटी लाइसेंस के साथ लिंक ):
import argparse
import configparser
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument('--config_file', help='config file')
args, left_argv = parser.parse_known_args()
if args.config_file:
with open(args.config_file, 'r') as f:
config = configparser.SafeConfigParser()
config.read([args.config_file])
parser.add_argument('--arg1', help='argument 1')
parser.add_argument('--arg2', type=int, help='argument 2')
for k, v in config.items("Defaults"):
parser.parse_args([str(k), str(v)], args)
parser.parse_args(left_argv, args)
print(args)
यहाँ एक विन्यास फाइल का उदाहरण दिया गया है:
[Defaults]
--arg1=Hello!
--arg2=3
अब चल रहा है
> python main.py --config_file config_correct.conf --arg1 override
Namespace(arg1='override', arg2=3, config_file='test_argparse.conf')
हालाँकि, अगर हमारी कॉन्फ़िग फ़ाइल में कोई त्रुटि है:
--arg1=Hello!
--arg2='not an integer!'
स्क्रिप्ट चलाना, इच्छानुसार त्रुटि उत्पन्न करेगा:
> python main.py --config_file config_invalid.conf --arg1 override
usage: test_argparse_conf.py [-h] [--config_file CONFIG_FILE] [--arg1 ARG1]
[--arg2 ARG2]
main.py: error: argument --arg2: invalid int value: 'not an integer!'
मुख्य नकारात्मक पक्ष यह है कि यह parser.parse_args
ArgumentParser से त्रुटि जांच प्राप्त करने के लिए कुछ हद तक हैकिंग का उपयोग करता है , लेकिन मुझे इसके किसी विकल्प के बारे में पता नहीं है।