Yanıtlar:
Fabric 2 görev bağımsız değişkenleri belgeleri:
http://docs.pyinvoke.org/en/latest/concepts/invoking-tasks.html#task-command-line-arguments
Fabric 1.X, bağımsız değişkenleri görevlere iletmek için aşağıdaki sözdizimini kullanır:
fab task:'hello world'
fab task:something='hello'
fab task:foo=99,bar=True
fab task:foo,bar
Bununla ilgili daha fazla bilgiyi Fabric belgelerinde okuyabilirsiniz .
hello world
gerekli görünüyor?
world
yeni bir görevdir.
'hello world'
bir Python dizisi ile sonuçlanır 'hello world'
, ancak "hello world"
sonuçlanır hello world
(muhtemelen çoğu insanın isteyeceği şeydir).
bar=True
kumaşta komut bar='True'
boole değeri olmayan olarak geçecek
Kumaş argümanları çok temel dize ayrıştırma ile anlaşılır, bu yüzden onları nasıl göndereceğinize biraz dikkat etmelisiniz.
Aşağıda, aşağıdaki test işlevine bağımsız değişken iletmenin farklı yollarına birkaç örnek verilmiştir:
@task
def test(*args, **kwargs):
print("args:", args)
print("named args:", kwargs)
$ fab "test:hello world"
('args:', ('hello world',))
('named args:', {})
$ fab "test:hello,world"
('args:', ('hello', 'world'))
('named args:', {})
$ fab "test:message=hello world"
('args:', ())
('named args:', {'message': 'hello world'})
$ fab "test:message=message \= hello\, world"
('args:', ())
('named args:', {'message': 'message = hello, world'})
Kabuğu denklemden çıkarmak için burada çift tırnak kullanıyorum, ancak bazı platformlar için tek tırnak daha iyi olabilir. Ayrıca, kumaşın sınırlayıcı olarak kabul ettiği karakterlerin çıkışlarına da dikkat edin.
Dokümanlarda daha fazla ayrıntı: http://docs.fabfile.org/en/1.14/usage/fab.html#per-task-arguments
Fabric 2'de, argümanı görev işlevinize eklemeniz yeterlidir. Örneğin, version
argümanı göreve geçirmek için deploy
:
@task
def deploy(context, version):
...
Aşağıdaki gibi çalıştırın:
fab -H host deploy --version v1.2.3
Kumaş, seçenekleri otomatik olarak belgeler:
$ fab --help deploy
Usage: fab [--core-opts] deploy [--options] [other tasks here ...]
Docstring:
none
Options:
-v STRING, --version=STRING
Tüm Python değişkenlerini dizeler olarak geçirmeniz gerekir, özellikle de betikleri çalıştırmak için alt süreç kullanıyorsanız, aksi takdirde bir hata alırsınız. Değişkenleri int / boolean türlerine ayrı ayrı dönüştürmeniz gerekecek.
def print_this(var):
print str(var)
fab print_this:'hello world'
fab print_this='hello'
fab print_this:'99'
fab print_this='True'
Eğer birisi fabric2'de bir görevden diğerine parametre aktarmak istiyorsa, bunun için çevre sözlüğünü kullanın:
@task
def qa(ctx):
ctx.config.run.env['counter'] = 22
ctx.config.run.env['conn'] = Connection('qa_host')
@task
def sign(ctx):
print(ctx.config.run.env['counter'])
conn = ctx.config.run.env['conn']
conn.run('touch mike_was_here.txt')
Ve koş:
fab2 qa sign