مهاجرت کد 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>') جایگزین کنید.