2013-06-07 7 views
7

Aus irgendeinem Grund verwende ich keine Positionsargumente in meinem Programm, sondern akzeptieren "optionale" Argumente nur, steuern, ob ein Argument ist wirklich optional von Einrichtungen wie narg='?' oder action='store_true'. Daher sind die "optionalen Argumente" im Hilfetext irreführend. Kann ich es einfach als "Argumente" anzeigen? Vielen Dank.Wie ändere ich den Text "optionale Argumente" in Argarse

+0

Warten Sie, ich dachte, Sie können nicht ein optionales Argument obligatorisch machen ... – kirelagin

+0

Ah, Sie meinen, Sie überprüfen manuell ihre Anwesenheit. Das ist verrückt ... Sie fügen Ihre eigenen Prüfungen hinzu und versuchen nun, das eingebaute Verhalten zu überschreiben, wenn der Wechsel zu Positionsargumenten so einfach ist. – kirelagin

+0

@kirelagin Ich möchte meine Argumente nicht "positionsabhängig" machen, deshalb verwende ich "optionale Argumente" für alle Argumente. – ziyuang

Antwort

8

Nun, an der argparse Quelle suchen scheint es mir, dass es so einfach ist, wie die title von parser._optionals überschrieben wird, wie folgt aus:

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

Wahrscheinlich sollte ich erwähnen, dass es ist ein schmutziger Hack, und Ihre ganze Idee ist ein bisschen wahnsinnig, da der Wechsel zu positionalen Argumenten so einfach ist, und optionale Argumente sind optional.

+0

Ich denke, dass beide Antworten gleich gut sind. Also, wenn es dir nichts ausmacht, kann ich die Antwort von @falsetru akzeptieren, weil er/sie einen niedrigeren Ruf hat? – ziyuang

+0

@ziyuang Nun, sicher, es macht mir nichts aus. Aber ich schlage trotzdem vor, meine Antwort zu verwenden, da sie direkt das tut, was Sie brauchen, ohne über alle Gruppen und Titelvergleiche zu iterieren. – kirelagin

+0

Ich sollte klarer sein: Ich schlage vor, es überhaupt nicht zu tun. Aber Sie müssen nicht über alle Gruppen hinweg iterieren. – kirelagin

3
import argparse 

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

Vielen Dank für die Antwort und die '_action_groups' für mich! Aber irgendwie denke ich @ Kirelagins Antwort ist direkter, also werde ich seine akzeptieren. – ziyuang

Verwandte Themen