ফ্যাব্রিক টাস্কে প্যারামিটার পাস করুন


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
@ পিজিজেড যদি এটি সত্য হয় তবে সেই উদাহরণে সম্ভবত উদ্ধৃতিগুলি প্রয়োজনীয় কারণ টার্মিনাল বা ফ্যাব্রিকের কমান্ড লাইন পার্সারটি জায়গাটি দেখতে পাবে এবং মনে করবে যে সেই কাজের জন্য সমস্ত কিছুর শেষ 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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.