تقنية

exit في argparse: هل الرسالة تفرض رمز الخروج 2؟

الافتراضي صفر؛ argparse; exit,message:leaf; status:default 0; SystemExit:0; stderr:leaf; stdout:empty
افتراضي.

الرسالة لا تختار رمز الخروج هنا. [1] [2]

الخلاصة السريعة

لا؛ الافتراضي 0. [1] [2]

  • الرسالة لا تختار رمز الخروج هنا. [1] [2]
  • على CPython 3.12.14، نستدعي exit مباشرةً على محلل عادي برسالة leaf. [1] [2]
  • دون status صريح، نلتقط SystemExit ورمزه 0؛ stderr يساوي leaf وstdout فارغ. [1] [2]
  • exit يكتب الرسالة ثم يستعمل status؛ ليس هذا استدعاء error. [1] [2]
  • تحكم مستقل بنفس الرسالة وبـstatus=4 يرفع SystemExit برمز 4 وبالإخراج نفسه؛ الالتقاط يتيح متابعة المثال. [1] [2]

رسالة ورمز

الرسالة لا تختار رمز الخروج هنا. [1] [2]

استدعاء مباشر

على CPython 3.12.14، نستدعي exit مباشرةً على محلل عادي برسالة leaf. [1] [2]

الافتراضي صفر

دون status صريح، نلتقط SystemExit ورمزه 0؛ stderr يساوي leaf وstdout فارغ. [1] [2]

import argparse,contextlib,io own=argparse.ArgumentParser() out=io.StringIO();err=io.StringIO() with contextlib.redirect_stdout(out),contextlib.redirect_stderr(err): try: own.exit(message="leaf") except SystemExit as ex: code=ex.code print(code,err.getvalue(),out.getvalue()=="") [1] [2]

تحكم مستقل؛ argparse; exit,message:leaf; status:4; SystemExit:4; stderr:leaf; stdout:empty
صريح.

رمز صريح

exit يكتب الرسالة ثم يستعمل status؛ ليس هذا استدعاء error. [1] [2]

control=argparse.ArgumentParser() co=io.StringIO();ce=io.StringIO() with contextlib.redirect_stdout(co),contextlib.redirect_stderr(ce): try: control.exit(status=4,message="leaf") except SystemExit as ex: ccode=ex.code print(ccode,ce.getvalue(),co.getvalue()=="") [1] [2]

تحكم مستقل بنفس الرسالة وبـstatus=4 يرفع SystemExit برمز 4 وبالإخراج نفسه؛ الالتقاط يتيح متابعة المثال. [1] [2]

المراجع

  1. Python argparse
  2. CPython argparse

للتوسع: لغات البرمجة.

أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.