Làm thế nào về việc sử dụng parser.parse_known_args()
phương thức và sau đó thêm args --lport
và --rport
args theo yêu cầu nếu --prox
có.
# 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
--prox
khô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 --prox
khô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 đủ
--lport
và --rport
không hiển thị trong thông báo trợ giúp