مهاجرت کد optparse به argparse¶
ماژول argparse چندین قابلیت سطح بالاتر ارائه میدهد که بهصورت ذاتی توسط ماژول optparse ارائه نمیشوند، از جمله:
مدیریت آرگومانهای جایگاهی.
پشتیبانی از زیردستورها.
اجازه دادن به پیشوندهای جایگزین گزینه مانند
+و/.مدیریت آرگومانهایی با سبک صفر-یا-بیشتر و یک-یا-بیشتر.
تولید پیامهای کاربرد آگاهکنندهتر.
فراهم کردن رابطی بسیار سادهتر برای
typeوactionسفارشی.
در ابتدا، ماژول argparse تلاش میکرد سازگاری با optparse را حفظ کند. با این حال، تفاوتهای بنیادین طراحی میان پشتیبانی از پردازش گزینههای خط فرمان بهصورت اعلانی (در حالی که پردازش آرگومانهای جایگاهی به کد برنامه واگذار شده است)، و پشتیبانی از گزینههای نامدار و همچنین آرگومانهای جایگاهی در رابط اعلانی به این معناست که API بهمرور زمان از optparse فاصله گرفته است.
همانطور که در انتخاب یک کتابخانه تجزیه آرگومان توضیح داده شده است، برنامههایی که در حال حاضر از optparse استفاده میکنند و از روش کار آن رضایت دارند، میتوانند صرفاً به استفاده از optparse ادامه دهند.
توسعهدهندگان برنامههای کاربردی که مهاجرت را مدنظر دارند، باید پیش از تصمیمگیری دربارهی اینکه آیا مهاجرت مطلوب است یا خیر، فهرست تفاوتهای رفتاری ذاتی توصیفشده در آن بخش را نیز بررسی کنند.
برای برنامههایی که مهاجرت از optparse به argparse را انتخاب میکنند، پیشنهادهای زیر باید مفید باشد:
تمام فراخوانیهای
optparse.OptionParser.add_option()را با فراخوانیهایArgumentParser.add_argument()جایگزین کنید.(options, args) = parser.parse_args()را باargs = parser.parse_args()جایگزین کنید و فراخوانیهای بیشتری ازArgumentParser.add_argument()را برای آرگومانهای جایگاهی اضافه کنید. به خاطر داشته باشید که آنچه پیشترoptionsنامیده میشد، اکنون در زمینهیargparse،argsنامیده میشود.برای جایگزینی
optparse.OptionParser.disable_interspersed_args()، بهجایparse_args()ازparse_intermixed_args()استفاده کنید.کنشهای کالبک و آرگومانهای کلیدواژهای
callback_*را با آرگومانهایtypeیاactionجایگزین کنید.نامهای رشتهای برای آرگومانهای کلیدواژهای
typeرا با اشیای نوع متناظر جایگزین کنید (مثلاً int، float، complex و غیره).optparse.Valuesرا باNamespace، وoptparse.OptionErrorوoptparse.OptionValueErrorرا باArgumentErrorجایگزین کنید.رشتههای دارای آرگومانهای ضمنی مانند
%defaultیا%progرا با سینتکس استاندارد پایتون برای استفاده از دیکشنریها جهت قالببندی رشتهها، یعنی%(default)sو%(prog)s، جایگزین کنید.آرگومان
versionسازندهی OptionParser را با فراخوانیparser.add_argument('--version', action='version', version='<the version>')جایگزین کنید.