Il mio obiettivo è scrivere un'utilità della riga di comando Python usando argparse che ha più comandi che hanno ciascuno set diversi di input richiesti.Python e argparse: come variare gli argomenti aggiuntivi richiesti in base al primo argomento?
Ho provato a leggere i documenti, alcune ricerche su Google e lo stack è troppo pieno e non ho trovato nulla. Posso pensare ad alcune possibili soluzioni, ma sono brutte e richiedono la gestione manuale dei documenti di aiuto e della convalida. Il mio sospetto è che questo sia il tipo di problema con una soluzione comune ed efficace già abbastanza conosciuta, e mi mancano solo i termini giusti per cercarlo, oppure è abbastanza oscuro da un piccolo margine che non è pubblicato in molti posti.
L'idea migliore che ho adesso è di avere un argomento posizionale e in qualche modo avere requisiti diversi per un insieme di argomenti aggiuntivi basati sul valore di quell'input. Forse analizzerò due volte?
A titolo di esempio, si tratta di un caso simile:
C'è un argomento posizionale, animale
opzioni per animali sono gatto, lucertola, pesce
per il gatto, argomenti artigli, baffi, le zampe sono tenuti
Per lucertola, argomenti scale_color, favorite_food sono obbligatori
Per il pesce, argomento water_type i s richiesto
Vogliamo che gli argomenti aggiuntivi richiesti per ciascun valore animale diverso siano documentati in -h senza ricorrere a pratiche non ortodosse.
Ho pensato di farlo con un argomento opzionale per ciascuna delle principali scelte di categoria. Questo non è interessante perché l'utilità in realtà vuole solo prendere uno di questi argomenti, e se posso evitare di reinventare la ruota in termini di applicazione e documentazione di questo, preferirei farlo.
avrei potuto fare qualcosa di simile:
valid_commands = ['a','b','c','d','e','f','g']
parser.add_argument('command', choices = valid_commands)
parser.add_argument('inputs', nargs = '*')
Ma poi non ho buoni controlli di ingresso sui argomenti aggiuntivi per ogni scelta di comando.
Esiste un modo normale per eseguire questa operazione? Sicuramente è abbastanza comune scrivere un'utilità con diversi comandi possibili e diversi argomenti richiesti per ciascuno. Potrei sicuramente ottenere la maggior parte di ciò di cui ho bisogno aggiungendo controlli manuali e documentazione di aiuto, ma questo è il genere di cose che probabilmente farò abbastanza volte che ne varrà la pena farlo al primo tentativo.
Grazie per la lettura e fammi sapere se posso aiutare a fornire informazioni.
Grazie per il collegamento Ross. Lo controllerò adesso. –
Sembra che i subparser siano ciò che stavo cercando. Ci vorrà un po 'per capire esattamente che cosa deve accadere per l'implementazione, ma questo risolve sicuramente il mio problema. –