¿Cómo puedo pasar un parámetro a una tarea de estructura cuando llamo "fab" desde la línea de comandos? Por ejemplo:
def task(something=''):
print "You said %s" % something
$ fab task "hello"
You said hello
Done.
¿Es posible hacer esto sin preguntar fabric.operations.prompt
?
hello world
embargo, ¿las citas son necesarias?world
era una tarea nueva.'hello world'
daría como resultado una cadena de Python de'hello world'
, pero"hello world"
daría como resultadohello world
(que es probablemente lo que la mayoría de la gente desearía).bar=True
comando en la estructura pasará como unbar='True'
valor no booleanoLos argumentos de estructura se entienden con un análisis de cadenas muy básico, por lo que debe tener un poco de cuidado con la forma en que los envía.
Aquí hay algunos ejemplos de diferentes formas de pasar argumentos a la siguiente función de prueba:
Utilizo comillas dobles aquí para sacar la concha de la ecuación, pero las comillas simples pueden ser mejores para algunas plataformas. También tenga en cuenta los escapes para los caracteres que la tela considera delimitadores.
Más detalles en los documentos: http://docs.fabfile.org/en/1.14/usage/fab.html#per-task-arguments
fuente
En Fabric 2, simplemente agregue el argumento a su función de tarea. Por ejemplo, para pasar el
version
argumento a la tareadeploy
:Ejecútelo de la siguiente manera:
Fabric incluso documenta las opciones automáticamente:
fuente
Debe pasar todas las variables de Python como cadenas, especialmente si está utilizando un subproceso para ejecutar los scripts, o recibirá un error. Deberá convertir las variables de nuevo a tipos int / booleanos por separado.
fuente
Si alguien está buscando pasar parámetros de una tarea a otra en fabric2, solo use el diccionario de entorno para eso:
Y correr:
fuente