วิธีการใช้parser.parse_known_args()
วิธีการแล้วเพิ่ม--lport
และ--rport
args เป็น args ที่ต้องการถ้า--prox
มีอยู่
# just add --prox arg now
non_int = argparse.ArgumentParser(description="stackoverflow question",
usage="%(prog)s [-h] [--prox --lport port --rport port]")
non_int.add_argument('--prox', action='store_true',
help='Flag to turn on proxy, requires additional args lport and rport')
opts, rem_args = non_int.parse_known_args()
if opts.prox:
non_int.add_argument('--lport', required=True, type=int, help='Listen Port.')
non_int.add_argument('--rport', required=True, type=int, help='Proxy port.')
# use options and namespace from first parsing
non_int.parse_args(rem_args, namespace = opts)
โปรดทราบว่าคุณสามารถจัดหาเนมสเปซที่opts
สร้างขึ้นหลังจากการแยกวิเคราะห์ครั้งแรกในขณะที่แยกวิเคราะห์อาร์กิวเมนต์ที่เหลือในครั้งที่สอง ด้วยวิธีนี้ในท้ายที่สุดหลังจากการแยกวิเคราะห์เสร็จสิ้นคุณจะมีเนมสเปซเดียวพร้อมตัวเลือกทั้งหมด
ข้อเสีย:
- หาก
--prox
ไม่มีอยู่ตัวเลือกอื่น ๆ อีกสองตัวเลือกจะไม่ปรากฏในเนมสเปซ แม้ว่าจะขึ้นอยู่กับกรณีการใช้งานของคุณหาก--prox
ไม่มีอยู่สิ่งที่เกิดขึ้นกับตัวเลือกอื่น ๆ ก็ไม่เกี่ยวข้อง
- ต้องแก้ไขข้อความการใช้งานเนื่องจาก parser ไม่ทราบโครงสร้างทั้งหมด
--lport
และ--rport
ไม่ปรากฏในข้อความช่วยเหลือ