আপডেট: এই উত্তরে এখনও সমস্যা আছে; উদাহরণস্বরূপ, এটি requiredআর্গুমেন্টগুলি পরিচালনা করতে পারে না এবং এর জন্য একটি বিশ্রী কনফিগার সিনট্যাক্স প্রয়োজন। পরিবর্তে, কনফিগারআর্গ পার্স মনে হচ্ছে ঠিক এই প্রশ্নটি যা জিজ্ঞাসা করেছে, এবং এটি একটি স্বচ্ছ, ড্রপ-ইন প্রতিস্থাপন।
বর্তমানের সাথে একটি সমস্যা হ'ল কনফিগার ফাইলে আর্গুমেন্ট অবৈধ থাকলে এটি ত্রুটি করবে না। এখানে একটি ভিন্ন নেতিবাচক সংস্করণ রয়েছে: আপনাকে কীগুলিতে --বা -উপসর্গটি অন্তর্ভুক্ত করতে হবে ।
অজগর কোডটি এখানে রয়েছে ( এমআইটি লাইসেন্সের সাথে সংক্ষেপে লিঙ্ক ):
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ক্ষতিটি হ'ল এটি আর্গুমেন্ট পার্সার থেকে ত্রুটি পরীক্ষা করার জন্য কিছুটা হ্যাকলি ব্যবহার করে তবে আমি এর কোনও বিকল্প সম্পর্কে অবগত নই।