आर्ग्स

किसी समस्या की शिकायत करें सोर्स देखें Nightly · 7.4 . 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 सही (डिफ़ॉल्ट) है, तो सूची में मौजूद आर्ग्युमेंट को पहले और आखिरी आर्ग्युमेंट के तौर पर डाला जाता है.
ध्यान दें कि खाली स्ट्रिंग ऐसे मान्य आर्ग्युमेंट होती हैं जिन पर प्रोसेसिंग के सभी चरण लागू होते हैं.

पैरामीटर

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

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

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

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

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

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

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

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

set_param_file_format

Args Args.set_param_file_format(format)

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

पैरामीटर

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

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

use_param_file

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

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

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

पैरामीटर

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

उदाहरण के लिए, अगर आर्ग्युमेंट को किसी params फ़ाइल "params.txt" में, फिर "--file=%s" तय करना हो इससे कार्रवाई कमांड लाइन में "--file=params.txt" हो जाएगा.

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