2013-12-15 28 views
16

Devo scrivere un'interfaccia della riga di comando e ho visto che posso usare docopt e argparse.Python - Differenza tra docopt e argparse

Mi piacerebbe sapere quali sono le principali differenze tra i due in modo da poter fare una scelta illuminata.

Si prega di attenersi ai fatti. Non voglio Wow. docopt. Così bello. Molto utile.

+3

'argparse' è nel pacchetto Python predefinito mentre' docopt' è un modulo separato. –

risposta

10

Docopt analizza una stringa doc, mentre argparse ne costruisce l'analisi creando un'istanza di oggetto e aggiungendo il comportamento ad essa tramite le chiamate di funzione.

Esempio per argparse:

parser = argparse.ArgumentParser() 
parser.add_argument("operation", help="mathematical operation that will be performed", 
    choices=['add', 'subtract', 'multiply', 'divide']) 
parser.add_argument("num1", help="the first number", type=int) 
parser.add_argument("num2", help="the second number", type=int) 
args = parser.parse_args() 

Esempio per docopt:

"""Calculator using docopt 

Usage: 
    calc_docopt.py <operation> <num1> <num2> 
    calc_docopt.py (-h | --help) 

Arguments: 
    <operation> Math Operation 
    <num1>  First Number 
    <num2>  Second Number 

Options: 
    -h, --help  Show this screen. 

""" 
from docopt import docopt 

if __name__ == '__main__': 
    arguments = docopt(__doc__, version='Calculator with docopt') 
    print(arguments) 

Nota, che utilizza docopt Usage: e Options: sezioni per l'analisi. Qui Arguments: viene fornito solo per comodità dell'utente finale.

+1

Dopo forse un anno di utilizzo, penso che valga la pena ricordare che dal momento che docopt è piuttosto recente e non fa parte del core di python, potrebbe non essere disponibile su sistemi meno recenti. io non è su Debian Wheezy (ma è su Jessie). – baldurmen

6

argparse è nella libreria predefinita python, quindi questo non aggiunge alcuna dipendenza extra al programma. Le differenze sono principalmente il modo di scrivere il tuo codice. Usando argparse è possibile aggiungere ganci per plugin in modo che possano aggiungere i propri argumnets al programma. Ad esempio, flake8 utilizza questo.

docopt è un modulo di terze parti fornisce un modo semplice di analisi degli argomenti. Personalmente mi piace il docopt per la sua semplicità, ma non sto dicendo che sia il migliore da usare in tutti i casi. Nella loro documentazione menzionano che usando docopt è possibile utilizzare più combinazioni di passaggi di argomenti rispetto a quando si utilizza argparse.