Argite

2013-06-07 10 views
7

'daki "isteğe bağlı argümanlar" metnini nasıl değiştirebilirim Herhangi bir nedenden dolayı, programımda konumsal argümanlar kullanmıyorum, ancak yalnızca "isteğe bağlı" bağımsız değişkenleri kabul ediyorum ve bir bağımsız değişkenin gerçekten narg='?' veya action='store_true' gibi tesisler tarafından isteğe bağlı olup olmadığını denetleme. Böylece yardım metnindeki "isteğe bağlı argümanlar" yanıltıcı olacaktır. Onu sadece "argümanlar" olarak görüntüleyebilir miyim? Teşekkür ederim.Argite

+0

Bekleyin, isteğe bağlı bir argümanı zorunlu yapamayacağınızı düşünmüştüm… – kirelagin

+0

Ah, demek ki, onların varlığını el ile kontrol ediyorsunuz. Bu çılgınca… Şimdi kendi kontrollerinizi ekliyorsunuz, şimdi bazı yerleşik davranışları geçersiz kılmaya çalışıyorsunuz, konumsal argümanlara geçiş yapmak çok kolay. – kirelagin

+0

@kirelagin Argümanlarımı "konuma duyarlı" değil, tüm argümanlar için "isteğe bağlı argümanlar" kullanıyorum. – ziyuang

cevap

8

Eh, argparse kaynağına bakarak bunun böyle, parser._optionals ait title üzerine yazarak kadar basit geliyor bana : Muhtemelen

parser._optionals.title = "my mandatory arguments, they are actually optionals, but I'll check for their presence" 

Ben kirli bir hack olduğunu belirtmeliyim ve Bütün fikriniz biraz çılgın, çünkü pozisyonel argümanlara geçmek çok kolay ve isteğe bağlı argümanlar opsiyonel.

+0

Bence her iki cevap da eşit derecede iyi. Eğer sakıncası yoksa, daha düşük bir itibara sahip olduğu için @falsetru cevabını kabul edebilir miyim? – ziyuang

+0

@ziyuang Peki, emin değilim. Ama yine de, tüm grupları ve başlık karşılaştırmalarını yinelemeden, ihtiyacınız olan şeyi doğrudan yaptığından hala cevabımı kullanmanızı öneriyorum. – kirelagin

+0

Daha açık olmalıyım: Bunu hiç yapmamanızı öneririm. Ama açıkça tüm gruplarda yinelemeye gerek yok. – kirelagin

3
import argparse 

parser = argparse.ArgumentParser() 
for grp in parser._action_groups: 
    if grp.title == 'optional arguments': 
     grp.title = 'arguments' 
... 
+0

Cevabınız için bana teşekkür ederim ve '_action_groups' 'ı bana iletin! Ama ben bir şekilde @ kirelagin'in cevabının daha doğrudan olduğunu düşünüyorum, bu yüzden onun kabul edeceğim. – ziyuang