Làm thế nào về việc sử dụng parser.parse_known_args()phương thức và sau đó thêm args --lportvà --rportargs theo yêu cầu nếu --proxcó.
# 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)
Cũng nên nhớ rằng bạn có thể cung cấp không gian tên optsđược tạo sau lần phân tích cú pháp đầu tiên trong khi phân tích cú pháp các đối số còn lại lần thứ hai. Bằng cách đó, cuối cùng, sau khi tất cả quá trình phân tích cú pháp hoàn tất, bạn sẽ có một không gian tên duy nhất với tất cả các tùy chọn.
Hạn chế:
- Nếu
--proxkhông có, hai tùy chọn phụ thuộc khác thậm chí không có trong không gian tên. Mặc dù dựa trên trường hợp sử dụng của bạn, nếu --proxkhông có thì điều gì xảy ra với các tùy chọn khác là không liên quan.
- Cần sửa đổi thông báo sử dụng vì trình phân tích cú pháp không biết cấu trúc đầy đủ
--lportvà --rportkhông hiển thị trong thông báo trợ giúp