2012-10-24 11 views
5

Sto provando a creare un programma che può essere chiamato dalla riga di comando e utilizzare gli argomenti delle parole chiave in python 2.6. Finora ho provato:kwargs in eseguibili python

#!/usr/bin/python 
def read(foo = 5): 
    print foo 
    return 0 
if __name__ == '__main__' 
    read() 

Quando provo ad eseguire questo dalla riga di comando: ./test.py il programma stampe 5 come previsto. C'è un modo per usare ./test.py foo=6? Voglio conservare gli argomenti delle parole chiave.

Sembra una domanda semplice, ma non ho trovato una buona fonte per questo.

+2

Dai un'occhiata al modulo ['argparse'] (http://docs.python.org/dev/library/argparse.html) che è solo a questo scopo. –

risposta

6

python ha una libreria incorporata per aiutarti a raggiungere gli argomenti della riga di comando per uno script argparse. L'utilizzo è un po 'diverso allora che cosa si sta descrivendo nella vostra domanda però ...

Su un livello di base è possibile accedere a tutti gli argomenti della riga di comando per sys.argv, che sarà un elenco di argomenti

spiacenti dovrebbe avere menzionato la libreria Python 2.6 si chiama optparse

+0

Grazie per il rapido commento. Sfortunatamente sto usando python 2.6, quindi 'argparse' è unavailbale e non ho capito come usare' sys.argv' con gli argomenti delle parole chiave, ma ci sto ancora giocando. – greatscott

+1

@greatscott: c'è 'getopt' in python2.6, che dovrebbe fare nel tuo caso. – SilentGhost

+1

2.6 ha optparse anche –

3

Qualcosa di simile?

if __name__ == '__main__': 
    kwargs = dict(x.split('=', 1) for x in sys.argv[1:]) 
    read(**kwargs) 

Detto questo, argparse e optparse sono probabilmente andando a dare qualcosa di più robusto e più naturale per chi è abituato a linea di comando. (Per non parlare, supportando argomenti di tipi diversi dalla stringa.)

Oh, e se quello che sei in realtà dopo è solo l'uso interattivo della tua funzione, utilizzare l'interprete interattivo; python o ipython. Dovresti inserire il codice in un file che termina con .py e importarlo, quindi puoi semplicemente chiamarlo.

+0

Grazie. In realtà sto scrivendo questo per un collaboratore che vuole eseguire tutto dalla riga di comando invece di lavorare con 'python' o' ipython'. Apprezzo l'aiuto però. Controllerò 'optparse'. – greatscott

1

Un'alternativa meno comune, ma molto interessante è docopt: una libreria che genera un parser di argomenti dal messaggio di aiuto che scrivi per il tuo programma (on github).

Problemi correlati