2012-12-27 13 views
6

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.

risposta

Problemi correlati