Comment puis-je passer un paramètre à une tâche de fabric lorsque j'appelle "fab" depuis la ligne de commande? Par exemple:
def task(something=''):
print "You said %s" % something
$ fab task "hello"
You said hello
Done.
Est-il possible de faire cela sans demander avec fabric.operations.prompt
?
hello world
semblent nécessaires cependant?world
c'était une nouvelle tâche.'hello world'
donnerait une chaîne Python de'hello world'
, mais"hello world"
aboutirait àhello world
(ce qui est probablement ce que la plupart des gens voudraient).bar=True
commande en fabric sera transmise commebar='True'
n'étant pas une valeur booléenneLes arguments Fabric sont compris avec une analyse de chaîne très basique, vous devez donc être un peu prudent avec la façon dont vous les envoyez.
Voici quelques exemples de différentes manières de passer des arguments à la fonction de test suivante:
J'utilise des guillemets doubles ici pour retirer le shell de l'équation, mais les guillemets simples peuvent être meilleurs pour certaines plates-formes. Notez également les échappements pour les caractères que Fabric considère comme des délimiteurs.
Plus de détails dans la documentation: http://docs.fabfile.org/en/1.14/usage/fab.html#per-task-arguments
la source
Dans Fabric 2, ajoutez simplement l'argument à votre fonction de tâche. Par exemple, pour passer l'
version
argument à la tâchedeploy
:Exécutez-le comme suit:
Fabric documente même automatiquement les options:
la source
Vous devez transmettre toutes les variables Python sous forme de chaînes, en particulier si vous utilisez un sous-processus pour exécuter les scripts, sinon vous obtiendrez une erreur. Vous devrez reconvertir les variables en types int / booléen séparément.
la source
Si quelqu'un cherche à passer des paramètres d'une tâche à une autre dans fabric2, utilisez simplement le dictionnaire d'environnement pour cela:
Et courir:
la source