आर्ग्स

समस्या की शिकायत करें सोर्स देखें ठीक 24/}20} 7.3 · 7.2 · 7.1 · 7.0 · 6.5

यह एक ऐसा ऑब्जेक्ट है जो कम मेमोरी में, कमांड लाइन के कुछ हिस्से या पूरे हिस्से को बनाने के लिए ज़रूरी डेटा को शामिल करता है.

अक्सर ऐसा होता है कि किसी कार्रवाई के लिए एक बड़ी कमांड लाइन की ज़रूरत होती है, जिसमें ट्रांज़िटिव डिपेंडेंसी से इकट्ठा की गई वैल्यू होती हैं. उदाहरण के लिए, लिंकर कमांड लाइन में उन सभी ऑब्जेक्ट फ़ाइलों की सूची हो सकती है जो लिंक की जा रही सभी लाइब्रेरी के लिए ज़रूरी हैं. सबसे सही तरीका यह है कि इस तरह के ट्रांज़िशन डेटा को depset में सेव किया जाए, ताकि उन्हें कई टारगेट के साथ शेयर किया जा सके. हालांकि, अगर नियम बनाने वाले को ऐक्शन कमांड लाइन बनाने के लिए, इन डिपसेट को स्ट्रिंग की सूचियों में बदलना पड़ता है, तो यह मेमोरी शेयर करने के ऑप्टिमाइज़ेशन को खत्म कर देगा.

इसी वजह से, ऐक्शन कंस्ट्रक्शन के फ़ंक्शन, स्ट्रिंग के साथ-साथ Args ऑब्जेक्ट भी स्वीकार करते हैं. हर Args ऑब्जेक्ट, स्ट्रिंग और डेपसेट को जोड़ने के तरीके दिखाता है. इनमें डेटा में बदलाव करने के लिए, वैकल्पिक ट्रांसफ़ॉर्मेशन ऐक्शन भी शामिल होते हैं. Args ऑब्जेक्ट, कमांड लाइन का हिसाब लगाने के दौरान, एक्ज़ीक्यूशन के चरण तक उन डिपसेट को प्रोसेस नहीं करते हैं जिन्हें वे एनकैप्सुलेट करते हैं. इससे, विश्लेषण का चरण पूरा होने तक किसी भी महंगी कॉपी को टालने में मदद मिलती है. ज़्यादा जानकारी के लिए, परफ़ॉर्मेंस को ऑप्टिमाइज़ करना पेज देखें.

Args को ctx.actions.args() को कॉल करके बनाया जाता है. इन्हें ctx.actions.run() या ctx.actions.run_shell() के arguments पैरामीटर के तौर पर पास किया जा सकता है. Args ऑब्जेक्ट का हर म्यूटेशन, संभावित कमांड लाइन में वैल्यू जोड़ता है.

map_each सुविधा की मदद से, आइटम को स्ट्रिंग में बदलने का तरीका पसंद के मुताबिक बनाया जा सकता है. अगर आपने map_each फ़ंक्शन नहीं दिया है, तो स्टैंडर्ड कन्वर्ज़न इस तरह होगा:

  • पहले से स्ट्रिंग वाली वैल्यू को वैसे ही छोड़ दिया जाता है.
  • File ऑब्जेक्ट को उनकी File.path वैल्यू में बदल दिया जाता है.
  • Label ऑब्जेक्ट, स्ट्रिंग के तौर पर दिखते हैं. ये ऑब्जेक्ट, डेटा स्टोर करने की मुख्य जगह के हिसाब से हल किए जाने पर, उसी ऑब्जेक्ट पर वापस आ जाते हैं. अगर संभव हो, तो स्ट्रिंग रिप्रज़ेंटेशन में, किसी रिपॉज़िटरी के कैननिकल नेम के बजाय, उसके सामान्य नाम का इस्तेमाल किया जाता है. इससे यह रिप्रज़ेंटेशन, BUILD फ़ाइलों में इस्तेमाल के लिए सही हो जाता है. हालांकि, यह ज़रूरी नहीं है कि //foo:bar, @repo//foo:bar, और @@canonical_name+//foo:bar.bzl जैसे सामान्य उदाहरणों के अलावा, कोई और उदाहरण भी दिया जाए.
  • अन्य सभी टाइप को तय नहीं किए गए तरीके से स्ट्रिंग में बदल दिया जाता है. इस वजह से, आपको add() को ऐसी वैल्यू पास करने से बचना चाहिए जो स्ट्रिंग या File टाइप की न हों. साथ ही, अगर उन्हें add_all() या add_joined() पर पास किया जाता है, तो आपको एक map_each फ़ंक्शन देना चाहिए.

स्ट्रिंग फ़ॉर्मैटिंग (add*() के तरीकों के format, format_each, और format_joined पैरामीटर) का इस्तेमाल करते समय, फ़ॉर्मैट टेंप्लेट को उसी तरह से समझा जाता है जिस तरह स्ट्रिंग में %-सबस्टिट्यूशन किया जाता है. हालांकि, टेंप्लेट में सिर्फ़ एक सबस्टिट्यूशन प्लेसहोल्डर होना चाहिए और वह %s होना चाहिए. प्रतिशत के लिटरल को %% के तौर पर एस्केप किया जा सकता है. ऊपर बताए गए तरीके से वैल्यू को स्ट्रिंग में बदलने के बाद, फ़ॉर्मैटिंग लागू की जाती है.

add*() के हर तरीके का एक वैकल्पिक फ़ॉर्म होता है, जो एक अतिरिक्त पोज़िशनल पैरामीटर स्वीकार करता है. यह "arg name" स्ट्रिंग होती है, जिसे बाकी सभी आर्ग्युमेंट से पहले डाला जाता है. अगर add_all और add_joined के लिए, क्रम खाली है, तो अतिरिक्त स्ट्रिंग नहीं जोड़ी जाएगी. उदाहरण के लिए, एक ही तरह के इस्तेमाल से कमांड लाइन में --foo val1 val2 val3 --bar या सिर्फ़ --bar जोड़ा जा सकता है. यह इस बात पर निर्भर करता है कि दिए गए क्रम में val1..val3 है या नहीं.

अगर कमांड लाइन का साइज़, सिस्टम की तय सीमा से ज़्यादा हो सकता है, तो पैरामीटर फ़ाइलों में आर्ग्युमेंट डाले जा सकते हैं. use_param_file() और set_param_file_format() देखें.

उदाहरण: मान लें कि हमें कमांड लाइन जनरेट करनी है:

--foo foo1.txt foo2.txt ... fooN.txt --bar bar1.txt,bar2.txt,...,barM.txt --baz
हम इस Args ऑब्जेक्ट का इस्तेमाल कर सकते हैं:
# foo_deps and bar_deps are depsets containing
# File objects for the foo and bar .txt files.
args = ctx.actions.args()
args.add_all("--foo", foo_deps)
args.add_joined("--bar", bar_deps, join_with=",")
args.add("--baz")
ctx.actions.run(
  ...
  arguments = [args],
  ...
)

सदस्य

जोड़ें

Args Args.add(arg_name_or_value, value=unbound, *, format=None)

इस कमांड लाइन में आर्ग्युमेंट जोड़ता है.

पैरामीटर

पैरामीटर ब्यौरा
arg_name_or_value ज़रूरी
अगर दो पोज़िशनल पैरामीटर पास किए जाते हैं, तो इसे आर्ग्युमेंट के नाम के तौर पर समझा जाता है. किसी भी प्रोसेसिंग के बिना, वैल्यू से पहले आर्ग्युमेंट का नाम जोड़ा जाता है. अगर सिर्फ़ एक पोज़िशनल पैरामीटर पास किया जाता है, तो उसे value के तौर पर समझा जाता है (यहां देखें).
value डिफ़ॉल्ट तौर पर, unbound
जोड़ा जाने वाला ऑब्जेक्ट है. इसे ऊपर बताए गए स्टैंडर्ड कन्वर्ज़न का इस्तेमाल करके, स्ट्रिंग में बदल दिया जाएगा. इस फ़ंक्शन के लिए कोई map_each पैरामीटर नहीं है, इसलिए value, स्ट्रिंग या File में से कोई एक होना चाहिए. इस तरीके के बजाय, add_all() या add_joined() को सूची, ट्यूपल, डिप्सेट या डायरेक्ट्री File पास करना होगा.
format string; या None; डिफ़ॉल्ट रूप से None
फ़ॉर्मैट वाला स्ट्रिंग पैटर्न होता है. इसे value के स्ट्रिंग वाले वर्शन पर लागू किया जाता है.

add_all

Args Args.add_all(arg_name_or_values, values=unbound, *, map_each=None, format_each=None, before_each=None, omit_if_empty=True, uniquify=False, expand_directories=True, terminate_with=None, allow_closure=False)

इस कमांड लाइन में कई आर्ग्युमेंट जोड़ता है. प्लान लागू करने के दौरान, आइटम को लेज़ी तरीके से प्रोसेस किया जाता है.

ज़्यादातर प्रोसेसिंग, जोड़ने के लिए दी गई आर्ग्युमेंट की सूची पर होती है. इसके लिए, यह तरीका अपनाएं:

  1. हर डायरेक्ट्री File आइटम को उस डायरेक्ट्री में बार-बार होने वाले सभी File से बदल दिया जाता है.
  2. अगर map_each दिया गया है, तो यह हर आइटम पर लागू होता है. साथ ही, इस वजह से बनी स्ट्रिंग की सूचियों को जोड़कर, आर्ग्युमेंट की शुरुआती सूची बनाई जाती है. अगर ऐसा नहीं है, तो शुरुआती आर्ग्युमेंट की सूची, हर आइटम पर स्टैंडर्ड कन्वर्ज़न लागू करने का नतीजा है.
  3. अगर सूची में मौजूद हर आर्ग्युमेंट मौजूद है, तो उसे format_each से फ़ॉर्मैट किया जाता है.
  4. अगर uniquify सही है, तो डुप्लीकेट आर्ग्युमेंट हटा दिए जाते हैं. पहली बार इवेंट होने पर ही वह सेव होता है.
  5. अगर before_each स्ट्रिंग दी जाती है, तो उसे सूची में मौजूद हर मौजूदा आर्ग्युमेंट से पहले, नए आर्ग्युमेंट के तौर पर डाला जाता है. यह इस पॉइंट से जोड़े जाने वाले आर्ग्युमेंट की संख्या को असरदार तरीके से दोगुना कर देता है.
  6. अगर सूची खाली है और omit_if_empty सही (डिफ़ॉल्ट) है, तो सूची में मौजूद आर्ग्युमेंट को पहले और आखिरी आर्ग्युमेंट के तौर पर डाला जाता है.terminate_with
ध्यान दें कि खाली स्ट्रिंग मान्य आर्ग्युमेंट होती हैं, जिन्हें प्रोसेस करने के लिए इन सभी चरणों का पालन करना होता है.

पैरामीटर

पैरामीटर ब्यौरा
arg_name_or_values ज़रूरी
अगर दो पोज़िशनल पैरामीटर पास किए जाते हैं, तो इसे आर्ग्युमेंट के नाम के तौर पर समझा जाता है. arg नाम को values से पहले, बिना किसी प्रोसेसिंग के अलग आर्ग्युमेंट के तौर पर जोड़ा जाता है. अगर omit_if_empty 'सही है' (डिफ़ॉल्ट) है और कोई दूसरा आइटम नहीं जोड़ा गया है, तो यह आर्ग्युमेंट का नाम नहीं जोड़ा जाएगा. ऐसा तब होता है, जब values खाली हो या उसके सभी आइटम फ़िल्टर किए गए हों. अगर सिर्फ़ एक पोज़िशनल पैरामीटर पास किया जाता है, तो उसे values के तौर पर समझा जाता है (यहां देखें).
values सीक्वेंस या डिप्सेट; डिफ़ॉल्ट रूप से unbound
लिस्ट, टपल या डिप्सेट होता है, जिसके आइटम जोड़े जाएंगे.
map_each callable; या None; डिफ़ॉल्ट रूप से None
यह एक फ़ंक्शन है, जो हर आइटम को शून्य या उससे ज़्यादा स्ट्रिंग में बदल देता है. इन स्ट्रिंग को जोड़ने से पहले, इन पर और भी प्रोसेस की जा सकती है. अगर यह पैरामीटर नहीं दिया जाता है, तो स्टैंडर्ड कन्वर्ज़न का इस्तेमाल किया जाता है.

फ़ंक्शन में एक या दो पोज़िशनल आर्ग्युमेंट पास किए जाते हैं: बदलने के लिए आइटम और उसके बाद वैकल्पिक DirectoryExpander. दूसरा आर्ग्युमेंट सिर्फ़ तब पास किया जाएगा, जब दिया गया फ़ंक्शन उपयोगकर्ता के तय किया गया हो (बिल्ट-इन न हो) और उसमें एक से ज़्यादा पैरामीटर का एलान किया गया हो.

रिटर्न वैल्यू का टाइप इस बात पर निर्भर करता है कि आइटम के लिए कितने आर्ग्युमेंट बनाने हैं:

  • आम तौर पर, जब हर आइटम एक स्ट्रिंग में बदल जाता है, तो फ़ंक्शन को वह स्ट्रिंग दिखानी चाहिए.
  • अगर आइटम को पूरी तरह से फ़िल्टर करना है, तो फ़ंक्शन को None दिखाना चाहिए.
  • अगर आइटम एक से ज़्यादा स्ट्रिंग में बदल जाता है, तो फ़ंक्शन उन स्ट्रिंग की सूची दिखाता है.
सिर्फ़ एक स्ट्रिंग या None दिखाने का असर, क्रमशः एक या शून्य लंबाई वाली सूची दिखाने जैसा ही होता है. हालांकि, जहां ज़रूरत न हो वहां सूची बनाने से बचना बेहतर होता है. इससे, सूची को पढ़ना भी आसान हो जाता है.

आम तौर पर, expand_directories=True सेट होने पर, डायरेक्ट्री वाले आइटम अपने कॉन्टेंट में अपने-आप बड़ा हो जाते हैं. हालांकि, इससे अन्य वैल्यू में मौजूद डायरेक्ट्री का विस्तार नहीं होगा -- उदाहरण के लिए, जब आइटम ऐसे स्ट्रक्चर हैं जिनमें फ़ील्ड के तौर पर डायरेक्ट्री मौजूद हैं. इस स्थिति में, किसी डायरेक्ट्री की फ़ाइलों को मैन्युअल तरीके से पाने के लिए, DirectoryExpander आर्ग्युमेंट का इस्तेमाल किया जा सकता है.

विश्लेषण के फ़ेज़ के बड़े डेटा स्ट्रक्चर को, एक्सीक्यूशन फ़ेज़ में अनचाहे तौर पर सेव होने से रोकने के लिए, map_each फ़ंक्शन को टॉप-लेवल def स्टेटमेंट से एलान किया जाना चाहिए. यह डिफ़ॉल्ट रूप से नेस्ट किया गया फ़ंक्शन क्लोज़र नहीं हो सकता.

चेतावनी: map_each को कॉल करने के दौरान, print() स्टेटमेंट से कोई आउटपुट नहीं दिखेगा.

format_each स्ट्रिंग या None; डिफ़ॉल्ट रूप से None
यह map_each फ़ंक्शन से मिली हर स्ट्रिंग पर लागू होने वाला, स्ट्रिंग का कोई वैकल्पिक फ़ॉर्मैट पैटर्न है. फ़ॉर्मैट स्ट्रिंग में सिर्फ़ एक '%s' प्लेसहोल्डर होना चाहिए.
before_each string या None; डिफ़ॉल्ट तौर पर None
यह values से मिले हर आर्ग्युमेंट को जोड़ने से पहले जोड़ा जाने वाला वैकल्पिक आर्ग्युमेंट है.
omit_if_empty bool; डिफ़ॉल्ट True है
अगर सही है, तो अगर values से लिए गए किसी तर्क को जोड़ा नहीं जा रहा है, तो आगे की सभी प्रोसेसिंग को रोक दिया जाता है और कमांड लाइन में कोई बदलाव नहीं होता. अगर यह फ़ील्ड 'गलत' पर सेट है, तो आर्ग्युमेंट का नाम और terminate_with, अगर दिया गया है, तो उसे जोड़ दिया जाएगा. भले ही, कोई अन्य आर्ग्युमेंट दिया गया हो या नहीं.
uniquify bool; डिफ़ॉल्ट रूप से False
पर सेट होता है अगर यह 'सही' पर सेट है, तो values से मिले डुप्लीकेट आर्ग्युमेंट हटा दिए जाएंगे. हर आर्ग्युमेंट की सिर्फ़ पहली बार होने वाली वैल्यू ही दिखेगी. आम तौर पर, इस सुविधा की ज़रूरत नहीं होती, क्योंकि डेपसेट पहले से ही डुप्लीकेट को हटा देते हैं. हालांकि, अगर map_each एक से ज़्यादा आइटम के लिए एक ही स्ट्रिंग दिखाता है, तो यह सुविधा काम की हो सकती है.
expand_directories bool; डिफ़ॉल्ट तौर पर, इसकी वैल्यू True
होती है अगर इसकी वैल्यू 'सही' है, तो values में मौजूद सभी डायरेक्ट्री, फ़ाइलों की फ़्लैट सूची में बदल जाएंगी. ऐसा map_each लागू होने से पहले होता है.
terminate_with string या None; डिफ़ॉल्ट तौर पर None
होता है अन्य सभी आर्ग्युमेंट के बाद जोड़ने के लिए, वैकल्पिक आर्ग्युमेंट. अगर omit_if_empty सही (डिफ़ॉल्ट) है और कोई अन्य आइटम नहीं जोड़ा गया है, तो यह आर्ग्युमेंट नहीं जोड़ा जाएगा. ऐसा तब होता है, जब values खाली हो या उसके सभी आइटम फ़िल्टर किए गए हों.
allow_closure bool; False
अगर सही है, तो map_each जैसे फ़ंक्शन पैरामीटर में बंद करने के इस्तेमाल की अनुमति देता है. आम तौर पर, यह ज़रूरी नहीं होता. इससे, विश्लेषण के चरण के दौरान, विश्लेषण वाले चरण के डेटा स्ट्रक्चर को बनाए रखने का जोखिम रहता है.

add_joined

Args Args.add_joined(arg_name_or_values, values=unbound, *, join_with, map_each=None, format_each=None, format_joined=None, omit_if_empty=True, uniquify=False, expand_directories=True, allow_closure=False)

सेपरेटर का इस्तेमाल करके, एक से ज़्यादा वैल्यू को आपस में जोड़कर, इस कमांड लाइन में आर्ग्युमेंट जोड़ता है. आइटम को लागू करने के दौरान, उन्हें धीरे-धीरे प्रोसेस किया जाता है.

प्रोसेसिंग, add_all() जैसी ही होती है. हालांकि, values से मिली आर्ग्युमेंट की सूची को एक आर्ग्युमेंट में जोड़ दिया जाता है, जैसे कि join_with.join(...) से. इसके बाद, दिए गए format_joined स्ट्रिंग टेंप्लेट का इस्तेमाल करके उसे फ़ॉर्मैट किया जाता है. add_all() के विपरीत, इसमें before_each या terminate_with पैरामीटर नहीं होता, क्योंकि आम तौर पर आइटम को एक आर्ग्युमेंट में जोड़ने पर, ये काम के नहीं होते.

अगर फ़िल्टर करने के बाद, आर्ग्युमेंट में शामिल करने के लिए कोई स्ट्रिंग नहीं है और omit_if_empty की वैल्यू 'सही' (डिफ़ॉल्ट) है, तो कोई प्रोसेस नहीं की जाती. अगर कोई स्ट्रिंग नहीं है, लेकिन omit_if_empty की वैल्यू 'गलत' है, तो जॉइन की गई स्ट्रिंग खाली होगी.

पैरामीटर

पैरामीटर ब्यौरा
arg_name_or_values ज़रूरी
अगर दो पोज़िशनल पैरामीटर पास किए जाते हैं, तो इसे आर्ग्युमेंट के नाम के तौर पर समझा जाता है. किसी भी प्रोसेसिंग के बिना, आर्ग्युमेंट का नाम values से पहले जोड़ा जाता है. अगर omit_if_empty सही (डिफ़ॉल्ट) है और values से कोई स्ट्रिंग नहीं मिली है, तो यह आर्ग्युमेंट नहीं जोड़ा जाएगा. ऐसा तब हो सकता है, जब values खाली हो या उसके सभी आइटम फ़िल्टर किए गए हों. अगर सिर्फ़ एक पोज़िशनल पैरामीटर पास किया जाता है, तो उसे values के तौर पर समझा जाता है (यहां देखें).
values sequence या depset; डिफ़ॉल्ट तौर पर unbound
होता है वह सूची, ट्यूपल या depset जिसका डेटा जॉइन किया जाएगा.
join_with string; ज़रूरी है
डिलिमिटर स्ट्रिंग, जिसका इस्तेमाल map_each और format_each लागू करने से मिली स्ट्रिंग को एक साथ जोड़ने के लिए किया जाता है. यह string.join() की तरह ही काम करती है.
map_each callable; या None; डिफ़ॉल्ट तौर पर None
यह वैसा ही है जैसा add_all के लिए है.
format_each string; या None; डिफ़ॉल्ट वैल्यू None
वही होती है जो add_all के लिए होती है.
format_joined string या None; डिफ़ॉल्ट तौर पर None
होता है जॉइन की गई स्ट्रिंग पर लागू किया जाने वाला, फ़ॉर्मैट स्ट्रिंग पैटर्न. यह पैटर्न इस्तेमाल करना ज़रूरी नहीं है. फ़ॉर्मैट स्ट्रिंग में सिर्फ़ एक '%s' प्लेसहोल्डर होना चाहिए.
omit_if_empty bool; डिफ़ॉल्ट तौर पर, यह True
होता है अगर यह 'सही है' पर सेट है और values खाली है या उसके सभी आइटम फ़िल्टर किए गए हैं, तो आगे की प्रोसेसिंग रोक दी जाती है और कमांड लाइन में कोई बदलाव नहीं होता. अगर यह फ़ील्ड 'गलत' पर सेट है, तो एक साथ जोड़ने के लिए कोई स्ट्रिंग न होने पर भी, दो आर्ग्युमेंट जोड़ दिए जाएंगे: आर्ग्युमेंट का नाम और उसके बाद खाली स्ट्रिंग (जो शून्य स्ट्रिंग का लॉजिकल जॉइन है).
uniquify bool; डिफ़ॉल्ट False
है यह add_all के लिए भी वैसा ही है.
expand_directories bool; डिफ़ॉल्ट True
है यह add_all के लिए भी वैसा ही है.
allow_closure bool; डिफ़ॉल्ट False
है, add_all के लिए भी इसी तरह.

set_param_file_format

Args Args.set_param_file_format(format)

अगर पैरामीटर फ़ाइल का इस्तेमाल किया जाता है, तो उसका फ़ॉर्मैट सेट करता है

पैरामीटर

पैरामीटर ब्यौरा
format string; ज़रूरी है
इनमें से कोई एक होना चाहिए:
  • "multiline": हर आइटम (आर्ग्युमेंट का नाम या वैल्यू) को पैरामीटर फ़ाइल में हूबहू लिखा जाता है. इसके बाद, एक नया लाइन वर्ण जोड़ा जाता है.
  • "shell": यह "multiline" के जैसा ही है, लेकिन आइटम को शेल कोटेशन में रखा जाता है
  • "flag_per_line": यह "multiline" के जैसा ही है. हालांकि, (1) पैरामीटर फ़ाइल में सिर्फ़ फ़्लैग ('--' से शुरू होने वाले) लिखे जाते हैं और (2) अगर कोई फ़्लैग है, तो उसकी वैल्यू एक ही लाइन में '=' सेपरेटर के साथ लिखी जाती है. Abseil flags library के लिए यह फ़ॉर्मैट ज़रूरी है.

अगर फ़ॉर्मैट को कॉल नहीं किया जाता है, तो यह डिफ़ॉल्ट रूप से "शेल" पर सेट हो जाता है.

use_param_file

Args Args.use_param_file(param_file_arg, *, use_always=False)

यह पैरामीटर को पैरामीटर फ़ाइल में डालता है और उन्हें पैरामीटर फ़ाइल के पॉइंटर से बदल देता है. जब आपके आर्ग्युमेंट, सिस्टम के लिए तय की गई कमांड की लंबाई की सीमा से ज़्यादा बड़े हों, तब इसका इस्तेमाल करें.

बेज़ल, बेहतर तरीके से काम करने के लिए, आउटपुट ट्री में पैरामीटर फ़ाइल को लिखने का विकल्प चुन सकता है. अगर कार्रवाइयों को डीबग किया जा रहा है और आपको पैरामीटर फ़ाइल की जांच करनी है, तो अपने बिल्ड में --materialize_param_files को पास करें.

पैरामीटर

पैरामीटर ब्यौरा
param_file_arg string; ज़रूरी है
एक "%s" वाली फ़ॉर्मैट स्ट्रिंग. अगर args को पैरामीटर फ़ाइल में स्पिल किया जाता है, तो उन्हें पैरामीटर फ़ाइल के पाथ के साथ फ़ॉर्मैट की गई इस स्ट्रिंग से बने आर्ग्युमेंट से बदल दिया जाता है.

उदाहरण के लिए, अगर args को पैरामीटर फ़ाइल "params.txt" में डाला जाता है, तो "--file=%s" तय करने पर, ऐक्शन कमांड लाइन में "--file=params.txt" शामिल हो जाएगा.

use_always bool; डिफ़ॉल्ट रूप से False
क्या हमेशा पैरामीटर को पैरामीटर फ़ाइल में डालना है. अगर यह वैल्यू 'गलत' है, तो आपके सिस्टम और आर्ग्युमेंट की लंबाई के आधार पर, bazel यह तय करेगा कि आर्ग्युमेंट को स्पिल किया जाना चाहिए या नहीं.