जवाबों:
फैब्रिक 2 कार्य तर्क दस्तावेज:
http://docs.pyinvoke.org/en/latest/concepts/invoking-tasks.html#task-command-line-arguments
फैब्रिक 1.X कार्यों के लिए तर्क देने के लिए निम्नलिखित सिंटैक्स का उपयोग करता है:
fab task:'hello world'
fab task:something='hello'
fab task:foo=99,bar=True
fab task:foo,bar
आप फैब्रिक डॉक्स में इसके बारे में अधिक पढ़ सकते हैं ।
hello world
हालांकि आसपास के उद्धरण आवश्यक प्रतीत होते हैं?
world
गया था और यह एक नया कार्य था।
'hello world'
एक पायथन स्ट्रिंग में परिणाम होगा 'hello world'
, लेकिन "hello world"
परिणाम होगा hello world
(जो शायद ज्यादातर लोग चाहते हैं)।
bar=True
फैब्रिक कमांड में bar='True'
बूलियन मान नहीं होगा
फैब्रिक तर्कों को बहुत बुनियादी स्ट्रिंग पार्सिंग के साथ समझा जाता है, इसलिए आपको थोड़ा सावधान रहना होगा कि आप उन्हें कैसे भेजते हैं।
निम्नलिखित परीक्षण समारोह में तर्क पारित करने के विभिन्न तरीकों के कुछ उदाहरण यहां दिए गए हैं:
@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'})
मैं शेल को समीकरण से बाहर निकालने के लिए यहां दोहरे उद्धरण का उपयोग करता हूं, लेकिन कुछ प्लेटफार्मों के लिए एकल उद्धरण बेहतर हो सकता है। उन वर्णों के लिए पलायन पर भी ध्यान दें, जो कपड़े को परिसीमनक मानते हैं।
डॉक्स में अधिक जानकारी: http://docs.fabfile.org/en/1.14/usage/fab.html#per-task-arguments
फैब्रिक 2 में, बस अपने टास्क फंक्शन में तर्क जोड़ें। उदाहरण के लिए, version
कार्य को तर्क देने के लिए deploy
:
@task
def deploy(context, version):
...
इसे निम्नानुसार चलाएं:
fab -H host deploy --version v1.2.3
कपड़े भी विकल्प स्वचालित रूप से दस्तावेजों:
$ fab --help deploy
Usage: fab [--core-opts] deploy [--options] [other tasks here ...]
Docstring:
none
Options:
-v STRING, --version=STRING
आपको सभी पायथन चर को स्ट्रिंग्स के रूप में पारित करने की आवश्यकता है, खासकर यदि आप स्क्रिप्ट को चलाने के लिए उप-प्रक्रिया का उपयोग कर रहे हैं, या आपको एक त्रुटि मिलेगी। आपको चर को वापस अलग / बुलियन प्रकारों में बदलने की आवश्यकता होगी।
def print_this(var):
print str(var)
fab print_this:'hello world'
fab print_this='hello'
fab print_this:'99'
fab print_this='True'
यदि कोई व्यक्ति फैब्रिक 2 में एक कार्य से दूसरे में पैरामीटर पारित करना चाहता है, तो उसके लिए पर्यावरण शब्दकोश का उपयोग करें:
@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')
और भाग खड़ा हुआ:
fab2 qa sign