फैब्रिक कार्य के लिए पैरामीटर पास करें


123

कमांड लाइन से "फैब" कहते समय मैं कपड़े के कार्य के लिए एक पैरामीटर कैसे पारित कर सकता हूं? उदाहरण के लिए:

def task(something=''):
    print "You said %s" % something
$ fab task "hello"
You said hello

Done.

क्या बिना मुस्तैदी के ऐसा करना संभव है fabric.operations.prompt?

जवाबों:


207

फैब्रिक 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

आप फैब्रिक डॉक्स में इसके बारे में अधिक पढ़ सकते हैं ।


9
उद्धरण आवश्यक नहीं हैं; सभी तर्क तार हैं: "चूंकि इस प्रक्रिया में स्ट्रिंग पार्सिंग शामिल है, सभी मान पायथन स्ट्रिंग्स के रूप में समाप्त हो जाएंगे, इसलिए तदनुसार योजना बनाएं। (हम फैब्रिक के भविष्य के संस्करणों में इस पर सुधार करने की उम्मीद करते हैं, बशर्ते एक सहज वाक्यविन्यास पाया जा सकता है।)
कार्ल जी

4
hello worldहालांकि आसपास के उद्धरण आवश्यक प्रतीत होते हैं?
PEZ

2
@PEZ अगर यह सच है, तो उद्धरण उस उदाहरण में आवश्यक हैं क्योंकि टर्मिनल या फैब्रिक की कमांड लाइन पार्सर अंतरिक्ष को देखती है और सोचती है कि उस कार्य के लिए सब कुछ समाप्त हो worldगया था और यह एक नया कार्य था।
एडम केर्ज़

1
इसके अतिरिक्त, एक मिनट से कम समय के लिए इसका उपयोग करने के बाद, मैंने पाया है कि, विंडोज़ पर, एकल उद्धरणों का उपयोग करके एकल उद्धरणों को तर्क के भाग के रूप में पारित किया जाता है, लेकिन पहले दोहरे उद्धरण छीन लिए जाते हैं। तो, 'hello world'एक पायथन स्ट्रिंग में परिणाम होगा 'hello world', लेकिन "hello world"परिणाम होगा hello world(जो शायद ज्यादातर लोग चाहते हैं)।
एडम केर्ज़

5
चूँकि इस प्रक्रिया में स्ट्रिंग पार्सिंग शामिल है, bar=Trueफैब्रिक कमांड में bar='True'बूलियन मान नहीं होगा
केमिकल प्रोग्रामर

7

फैब्रिक तर्कों को बहुत बुनियादी स्ट्रिंग पार्सिंग के साथ समझा जाता है, इसलिए आपको थोड़ा सावधान रहना होगा कि आप उन्हें कैसे भेजते हैं।

निम्नलिखित परीक्षण समारोह में तर्क पारित करने के विभिन्न तरीकों के कुछ उदाहरण यहां दिए गए हैं:

@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


7

फैब्रिक 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

समारोह में मेजबानों को पूर्वनिर्धारित करने का एक तरीका है? @Roles () टैग के समान जहां हम कार्य चलाने के लिए मेजबानों की सूची को परिभाषित कर सकते हैं।
अनीश

2

आपको सभी पायथन चर को स्ट्रिंग्स के रूप में पारित करने की आवश्यकता है, खासकर यदि आप स्क्रिप्ट को चलाने के लिए उप-प्रक्रिया का उपयोग कर रहे हैं, या आपको एक त्रुटि मिलेगी। आपको चर को वापस अलग / बुलियन प्रकारों में बदलने की आवश्यकता होगी।

def print_this(var):
    print str(var)

fab print_this:'hello world'
fab print_this='hello'
fab print_this:'99'
fab print_this='True'

1

यदि कोई व्यक्ति फैब्रिक 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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.