Jak mogę przekazać parametr do zadania sieci szkieletowej, wywołując „fab” z wiersza poleceń? Na przykład:
def task(something=''):
print "You said %s" % something
$ fab task "hello"
You said hello
Done.
Czy można to zrobić bez pytania fabric.operations.prompt
?
hello world
wydają się konieczne?world
było nowe zadanie.'hello world'
dałoby w Pythonie ciąg znaków'hello world'
, ale"hello world"
skutkowałbyhello world
(co prawdopodobnie jest tym, czego większość ludzi chciałaby).bar=True
w materiale zostanie przekazane polecenie,bar='True'
które nie jest wartością logicznąArgumenty dotyczące tkaniny są zrozumiałe przy bardzo podstawowym przetwarzaniu ciągów, więc musisz zachować ostrożność przy ich wysyłaniu.
Oto kilka przykładów różnych sposobów przekazywania argumentów do następującej funkcji testowej:
Używam tutaj podwójnego cudzysłowu, aby usunąć powłokę z równania, ale pojedyncze cudzysłowy mogą być lepsze na niektórych platformach. Zwróć także uwagę na ucieczki znaków, które tkanina uważa za ograniczniki.
Więcej szczegółów w dokumentach: http://docs.fabfile.org/en/1.14/usage/fab.html#per-task-arguments
źródło
W Fabric 2 po prostu dodaj argument do funkcji zadania. Na przykład, aby przekazać
version
argument do zadaniadeploy
:Uruchom go w następujący sposób:
Tkanina nawet automatycznie dokumentuje opcje:
źródło
Musisz przekazać wszystkie zmienne Pythona jako ciągi znaków, zwłaszcza jeśli używasz podprocesu do uruchamiania skryptów, w przeciwnym razie wystąpi błąd. Będziesz musiał osobno przekonwertować zmienne z powrotem na typy int / boolean.
źródło
Jeśli ktoś chce przekazać parametry z jednego zadania do drugiego w fabric2, po prostu użyj do tego słownika środowiska:
I biegnij:
źródło