Secondo PEP 257 la docstring dello script della riga di comando dovrebbe essere il suo messaggio di utilizzo.Come rispettare le docstring PEP 257 quando si utilizza il modulo optparse di Python?
La docstring di uno script (un programma stand-alone) dovrebbe essere utilizzabile come il suo messaggio di "utilizzo", stampato quando lo script viene invocato con argomenti non corretti o mancanti (o forse con una " -h "opzione, per" aiuto "). Tale documentazione deve documentare la funzione dello script e la sintassi della riga di comando, le variabili di ambiente e i file. messaggi di utilizzo possono essere abbastanza elaborata (diversi schermi pieno) e dovrebbero essere sufficienti per un nuovo utente di utilizzare il comando correttamente, così come una completa riferimento rapido a tutte le opzioni e gli argomenti per il sofisticato utente .
Quindi il mio docstring sarebbe simile a questa:
<tool name> <copyright info> Usage: <prog name> [options] [args] some text explaining the usage... Options: -h, --help show this help message and exit ...
Ora voglio utilizzare il modulo optparse. optparse genera le "Opzioni" sezioni e un "utilizzo" spiega la sintassi della riga di comando:
from optparse import OptionParser
if __name__ == "__main__":
parser = OptionParser()
(options, args) = parser.parse_args()
Quindi chiamare lo script con le stampe bandiera "-h":
Usage: script.py [options] Options: -h, --help show this help message and exit
Questo può essere modificato come segue:
parser = OptionParser(usage="Usage: %prog [options] [args]",
description="some text explaining the usage...")
che si traduce in
Usage: script.py [options] [args] some text explaining the usage... Options: -h, --help show this help message and exit
Ma come posso usare la docstring qui? Passare la docstring come messaggio di utilizzo ha due problemi.
- optparse aggiunge "Utilizzo:" al docstring se non inizia con "Utilizzo:"
- Il segnaposto '% prog' deve essere utilizzato nella docstring
Risultato
Secondo le risposte sembra che non ci sia modo di riutilizzare la docstring intesa dal modulo optparse. Quindi l'opzione rimanente è di analizzare manualmente la docstring e costruire OptionParser. (Quindi accetterò la risposta di S.Loot)
La parte "Usage:" è introdotta da IndentedHelpFormatter che può essere sostituita con il parametro formatter in OptionParser .__ init __().
mi piace la seconda soluzione. Non molto pulito ma intelligente e pragmatico. –
Poiché le righe vuote tra i paragrafi sono lo standard RST, questo salva l'esecuzione di un'analisi Docutils completa su __doc__ e ottiene quello che è, per definizione, il risultato previsto. –
Questa potrebbe essere un'opzione per la descrizione. Ma non riesco ancora a riutilizzare la parte "Utilizzo" e optparse forza il messaggio a iniziare con "Uso:". – wierob