parser.parse_known_args()
Yöntemi kullanmaya ve varsa gerekli args olarak --lport
ve --rport
args eklemeye ne dersiniz --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)
Ayrıca opts
, kalan bağımsız değişkenleri ikinci kez ayrıştırırken, ilk çözümlemeden sonra oluşturulan ad alanını sağlayabileceğinizi unutmayın . Bu şekilde, sonunda, tüm ayrıştırma tamamlandıktan sonra, tüm seçenekleri içeren tek bir ad alanına sahip olursunuz.
Dezavantajları:
- Eğer
--prox
mevcut değilse diğer iki bağımlı seçenekler ad alanında bile bulunmaz. Kullanım durumunuza bağlı olmasına rağmen, --prox
mevcut değilse , diğer seçeneklere ne olduğu ilgisizdir.
- Ayrıştırıcı tam yapıyı bilmediği için kullanım mesajının değiştirilmesi gerekiyor
--lport
ve --rport
yardım mesajında görünme