2012-02-07 16 views
68

En Python, entiendo cómo se pueden agregar los argumentos int y str a las secuencias de comandos.Argumento booleano para la secuencia de comandos

parser=argparse.ArgumentParser(description="""Mydescription""") 
parser.add_argument('-l', type=str, default='info', help='String argument') 
parser.add_argument('-dt', type=int, default ='', help='int argument') 

¿Qué significa booleanos?

Básicamente quiero pasar una bandera en mi script que dirá a la secuencia de comandos si hacer una acción específica o no.

+2

¿Qué hay de malo en acción '= 'store_true ''? –

+0

¿Qué comportamiento quieres con booleanos? (por ejemplo, con '-v verdadero' y '-v falso'?) – kennytm

Respuesta

133

Usted puede utilizar el action con store_true | store_false, o puede usar un int y dejar que la comprobación de conversión implícita sea un valor booleano.

Al usar el action, no pasaría un argumento --foo=true y --foo=false, simplemente lo incluiría si se configurara como verdadero.

python myProgram.py --foo 

De hecho creo que lo que es posible que desee es

parser.add_argument('-b', action='store_true', default=False) 
+0

Eso es perfecto. Gracias. – dublintech

+6

No creo que 'default = False' sea necesario. –

+19

@PaulDraper: explícito es mejor que implícito. – sberry

15
parser.add_argument('--foo', action='store_true') 
2
import distutils.util 
ARGP.add_argument('--on', '-o', type=distutils.util.strtobool, default='true') 

Ejemplo llamándolo:

$ ./myscript    # argp.on = 1 
$ ./myscript --on=false  # argp.on = 0 
$ ./myscript --on=False  # argp.on = 0 
$ ./myscript --on=0   # argp.on = 0 
$ ./myscript --on=1   # argp.on = 1 
$ ./myscript -o0   # argp.on = 0 
$ ./myscript -o false  # argp.on == 0 

que debería mencionar, puede enlazar el argumento a una envoltura locales función también, para manejar alguna otra coincidencia exacta de cadenas si desea admitir valores como "sí" y "no". también puede intentar interpretar la entrada como yaml, que también puede manejar sí/no. No he hecho esto desde hace tiempo, sin embargo, y creo que últimamente he chupan argumentos que excluyen mutuamente con el mismo valor dest, uno --no-option con action='store_false', y uno --option con action='store_true'

Cuestiones relacionadas