บ่อยครั้งที่การดำเนินการต้องใช้บรรทัดคำสั่งขนาดใหญ่ซึ่งมีค่าที่สะสมจากทรัพยากร Dependency แบบทรานซิทีฟ เช่น บรรทัดคำสั่ง Linker อาจระบุไฟล์ออบเจ็กต์ทั้งหมดที่ไลบรารีทั้งหมดที่ลิงก์จำเป็นต้องใช้ คุณควรจัดเก็บข้อมูลทรานซิชันดังกล่าวไว้ใน depset เพื่อให้แชร์โดยหลายเป้าหมายได้ อย่างไรก็ตาม หากผู้เขียนกฎต้องแปลง Depset เหล่านี้เป็นรายการสตริงเพื่อสร้างบรรทัดคำสั่งการดำเนินการ จะเอาชนะการเพิ่มประสิทธิภาพการแชร์หน่วยความจำนี้ได้
ด้วยเหตุนี้ ฟังก์ชันสร้างการดำเนินการจึงยอมรับออบเจ็กต์ Args นอกเหนือจากสตริง ออบเจ็กต์ Args แต่ละรายการแสดงการต่อสตริงและ Depset เข้าด้วยกัน โดยมีการเปลี่ยนรูปแบบที่ไม่บังคับสำหรับการจัดการข้อมูล ออบเจ็กต์ Args จะไม่ประมวลผลค่ากำหนดที่รวมมาด้วยจนกว่าจะถึงระยะการดำเนินการ ซึ่งเป็นเวลาที่จะต้องคำนวณบรรทัดคำสั่ง ซึ่งจะช่วยเลื่อนเวลาการคัดลอกที่มีราคาแพงไปจนกว่าช่วงการวิเคราะห์จะเสร็จสมบูรณ์ โปรดดูข้อมูลเพิ่มเติมในหน้าการเพิ่มประสิทธิภาพ
Args สร้างขึ้นโดยการเรียกใช้ ctx.actions.args() ซึ่งอาจส่งเป็นพารามิเตอร์ arguments ของ ctx.actions.run() หรือ ctx.actions.run_shell() ก็ได้ การเปลี่ยนแปลงแต่ละรายการของออบเจ็กต์ Args จะเพิ่มค่าต่อท้ายบรรทัดคำสั่งสุดท้าย
ฟีเจอร์ map_each ให้คุณปรับแต่งวิธีเปลี่ยนรูปแบบรายการเป็นสตริงได้ หากคุณไม่ได้ระบุฟังก์ชัน map_each การแปลงมาตรฐานจะเป็นดังนี้ 
- ค่าที่เป็นสตริงอยู่แล้วจะยังคงเดิม
- ออบเจ็กต์ Fileจะเปลี่ยนเป็นค่าFile.path
- ส่วนประเภทอื่นๆ ทั้งหมดจะเปลี่ยนเป็นสตริงในลักษณะที่ไม่ระบุ ด้วยเหตุนี้ คุณจึงควรหลีกเลี่ยงการส่งค่าที่ไม่ใช่สตริงหรือประเภท Fileไปยังadd()และหากคุณส่งค่าเหล่านี้ไปยังadd_all()หรือadd_joined()คุณควรระบุฟังก์ชันmap_each
เมื่อใช้การจัดรูปแบบสตริง (format, format_each และพารามิเตอร์ format_joined ของเมธอด add*()) เทมเพลตรูปแบบจะถูกตีความในลักษณะเดียวกับการแทนที่ % ในสตริง เว้นแต่เทมเพลตต้องมีตัวยึดตำแหน่งที่ใช้แทนเพียงตัวเดียวเท่านั้นและต้องเป็น %s เปอร์เซ็นต์จริงอาจกำหนดเป็น %% ได้ ใช้การจัดรูปแบบหลังจากแปลงค่าเป็นสตริงตามวิธีข้างต้นแล้ว
เมธอด add*() แต่ละวิธีมีรูปแบบอื่นที่ยอมรับพารามิเตอร์ตำแหน่งเพิ่มเติม ซึ่งก็คือ "ชื่ออาร์กิวเมนต์" ที่จะแทรกก่อนอาร์กิวเมนต์ที่เหลือ สำหรับ 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 | ต้องระบุ หากระบบส่งพารามิเตอร์ตำแหน่ง 2 รายการ ระบบจะตีความชื่ออาร์กิวเมนต์นี้เป็นชื่ออาร์กิวเมนต์ เพิ่มชื่ออาร์กิวเมนต์ไว้หน้าค่าโดยไม่มีการประมวลผลใดๆ หากส่งพารามิเตอร์ตำแหน่งเพียงรายการเดียว ระบบจะตีความเป็น value(ดูด้านล่าง) | 
| value | ค่าเริ่มต้น = ไม่เชื่อมโยง ออบเจ็กต์ที่จะต่อท้าย ระบบจะแปลงเป็นสตริงโดยใช้ Conversion มาตรฐานที่กล่าวถึงข้างต้น เนื่องจากไม่มีพารามิเตอร์ map_eachสำหรับฟังก์ชันนี้valueควรเป็นสตริงหรือFileต้องส่งรายการ, tuple, Depset หรือไดเรกทอรีFileไปยังadd_all()หรือadd_joined()แทนวิธีการนี้ | 
| format | string; or 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)
การประมวลผลส่วนใหญ่จะเกิดขึ้นกับรายการอาร์กิวเมนต์ที่จะต่อท้าย ตามขั้นตอนต่อไปนี้
- รายการ Fileของไดเรกทอรีแต่ละรายการจะถูกแทนที่ด้วยFileทั้งหมดที่มีอยู่ซ้ำๆ ในไดเรกทอรีนั้น
- หากระบุ map_eachไว้ ระบบจะนำไปใช้กับแต่ละรายการ และรายการสตริงที่ได้จะเชื่อมโยงกันเพื่อสร้างรายการอาร์กิวเมนต์เริ่มต้น ไม่เช่นนั้น รายการอาร์กิวเมนต์เริ่มต้นจะเป็นผลมาจากการใช้ Conversion มาตรฐานกับแต่ละรายการ
- อาร์กิวเมนต์แต่ละรายการในรายการจะอยู่ในรูปแบบ format_eachหากมี
- หาก uniquifyเป็นจริง ระบบจะนำอาร์กิวเมนต์ที่ซ้ำกันออก ครั้งแรกคือครั้งนั้นที่เหลืออยู่
- หากระบุสตริง before_eachระบบจะแทรกสตริงเป็นอาร์กิวเมนต์ใหม่ก่อนอาร์กิวเมนต์ที่มีอยู่แต่ละรายการในรายการ ซึ่งจะช่วยเพิ่มจำนวนอาร์กิวเมนต์ที่จะเพิ่มเข้ามาด้วยจุดนี้ได้อย่างมีประสิทธิภาพ
- ยกเว้นในกรณีที่รายการว่างเปล่าและ omit_if_emptyเป็น "จริง" (ค่าเริ่มต้น) ระบบจะแทรกชื่ออาร์กิวเมนต์และterminate_withเป็นอาร์กิวเมนต์แรกและอาร์กิวเมนต์สุดท้ายตามลำดับ หากมี
พารามิเตอร์
| พารามิเตอร์ | คำอธิบาย | 
|---|---|
| arg_name_or_values | ต้องระบุ หากระบบส่งพารามิเตอร์ตำแหน่ง 2 รายการ ระบบจะตีความชื่ออาร์กิวเมนต์นี้เป็นชื่ออาร์กิวเมนต์ เพิ่มชื่ออาร์กิวเมนต์ก่อน valuesโดยไม่มีการประมวลผลใดๆ ระบบจะไม่เพิ่มชื่ออาร์กิวเมนต์นี้หากomit_if_emptyเป็นจริง (ค่าเริ่มต้น) และไม่มีรายการอื่นๆ ต่อท้าย (เนื่องจากจะเกิดขึ้นหากvaluesว่างเปล่าหรือมีการกรองรายการทั้งหมด) หากส่งพารามิเตอร์ตำแหน่งเพียงรายการเดียว ระบบจะตีความเป็นvalues(ดูด้านล่าง) | 
| values | sequence; or depset;
                                     ค่าเริ่มต้น = ไม่จำกัดรายการ Tuple หรือ Depset ที่จะมีรายการที่จะต่อท้าย | 
| map_each | callable; or None;
                                     ค่าเริ่มต้น = ไม่มีฟังก์ชันที่แปลงแต่ละรายการเป็นสตริงตั้งแต่ 0 รายการขึ้นไป ซึ่งอาจประมวลผลเพิ่มเติมก่อนต่อท้าย หากไม่ได้ระบุพารามิเตอร์นี้ ระบบจะใช้ Conversion มาตรฐาน ระบบจะส่งฟังก์ชันอาร์กิวเมนต์ตำแหน่ง 1 หรือ 2 รายการ คือ รายการที่จะแปลง ตามด้วย  ประเภทของค่าการแสดงผลจะขึ้นอยู่กับจำนวนอาร์กิวเมนต์ที่จะสร้างสำหรับสินค้า ดังนี้ 
 Noneจะมีผลเหมือนกับการแสดงรายการความยาว 1 หรือความยาว 0 ตามลำดับ อย่างไรก็ตาม วิธีการนี้จะมีประสิทธิภาพและสามารถอ่านได้ง่ายเพื่อหลีกเลี่ยงการสร้างรายการที่ไม่จำเป็นโดยปกติแล้ว รายการที่เป็นไดเรกทอรีจะขยายไปยังเนื้อหาโดยอัตโนมัติเมื่อตั้งค่า  เพื่อหลีกเลี่ยงการเก็บรักษาโครงสร้างข้อมูลเฟสการวิเคราะห์ขนาดใหญ่ไว้ในระยะการดำเนินการโดยไม่ได้ตั้งใจ ต้องประกาศฟังก์ชัน  คำเตือน: คำสั่ง  | 
| format_each | string; or None;
                                     ค่าเริ่มต้น = ไม่มีรูปแบบสตริงที่ไม่บังคับ ใช้กับแต่ละสตริงที่ฟังก์ชัน map_eachแสดงผล สตริงรูปแบบต้องมี "%s" 1 รายการ ตัวยึดตําแหน่ง | 
| before_each | string; or None;
                                     ค่าเริ่มต้น = ไม่มีสตริง (ไม่บังคับ) ที่จะต่อท้ายก่อนแต่ละอาร์กิวเมนต์ที่ได้มาจาก values | 
| omit_if_empty | ค่าเริ่มต้น = จริง หากเป็นจริง หากไม่มีอาร์กิวเมนต์ที่ได้มาจาก valuesเพื่อต่อท้าย การประมวลผลเพิ่มเติมทั้งหมดจะถูกระงับและบรรทัดคำสั่งจะไม่มีการเปลี่ยนแปลง หากเป็น "เท็จ" ชื่ออาร์กิวเมนต์และterminate_with(หากระบุไว้) จะยังคงต่อท้ายไม่ว่าจะมีอาร์กิวเมนต์อื่นๆ หรือไม่ | 
| uniquify | ค่าเริ่มต้น = เท็จ หากเป็นจริง ระบบจะละเว้นอาร์กิวเมนต์ที่ซ้ำกันซึ่งได้มาจาก valuesเฉพาะการเกิดอาร์กิวเมนต์แรกของแต่ละอาร์กิวเมนต์เท่านั้นที่จะยังคงอยู่ โดยปกติจะไม่จำเป็นต้องใช้ฟีเจอร์นี้ เนื่องจาก Depset ข้ามรายการที่ซ้ำกันไปแล้ว แต่อาจเป็นประโยชน์หากmap_eachปล่อยสตริงเดียวกันสำหรับหลายรายการ | 
| expand_directories | ค่าเริ่มต้น = จริง หากเป็น "จริง" ไดเรกทอรีทั้งหมดใน valuesจะขยายเป็นรายการไฟล์แบบเดี่ยว การดำเนินการนี้จะเกิดขึ้นก่อนที่จะใช้map_each | 
| terminate_with | string; or None;
                                     ค่าเริ่มต้น = ไม่มีสตริงที่ไม่บังคับต่อท้ายอาร์กิวเมนต์อื่นๆ ทั้งหมด ระบบจะไม่เพิ่มสตริงนี้หาก omit_if_emptyเป็นจริง (ค่าเริ่มต้น) และไม่มีรายการอื่นๆ ต่อท้าย (เช่น กรณีที่valuesว่างเปล่าหรือมีการกรองรายการทั้งหมด) | 
| allow_closure | ค่าเริ่มต้น = เท็จ หากเป็น "จริง" อนุญาตให้ใช้การปิดในพารามิเตอร์ฟังก์ชัน เช่น 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 เป็น True (ค่าเริ่มต้น) ก็จะไม่มีการประมวลผล มิเช่นนั้น หากไม่มีสตริงที่เข้าร่วม แต่ omit_if_empty เป็นเท็จ สตริงที่เข้าร่วมจะเป็นสตริงว่าง
          
      
พารามิเตอร์
| พารามิเตอร์ | คำอธิบาย | 
|---|---|
| arg_name_or_values | ต้องระบุ หากระบบส่งพารามิเตอร์ตำแหน่ง 2 รายการ ระบบจะตีความชื่ออาร์กิวเมนต์นี้เป็นชื่ออาร์กิวเมนต์ เพิ่มชื่ออาร์กิวเมนต์ก่อน valuesโดยไม่มีการประมวลผลใดๆ ระบบจะไม่เพิ่มอาร์กิวเมนต์นี้หากomit_if_emptyเป็น "จริง" (ค่าเริ่มต้น) และไม่มีสตริงที่มาจากvaluesสำหรับการรวมเข้าด้วยกัน (ซึ่งอาจเกิดขึ้นได้หากvaluesว่างเปล่าหรือมีการกรองรายการทั้งหมด) หากส่งพารามิเตอร์ตำแหน่งเพียงรายการเดียว ระบบจะตีความเป็นvalues(ดูด้านล่าง) | 
| values | sequence; or depset;
                                     ค่าเริ่มต้น = ไม่จำกัดรายการ Tuple หรือ Depset ที่ระบบจะผนวกรายการ | 
| join_with | ต้องระบุ สตริงตัวคั่นที่ใช้รวมสตริงที่ได้รับจากการใช้ map_eachและformat_eachเข้าด้วยกันในลักษณะเดียวกับstring.join() | 
| map_each | callable; or None;
                                     ค่าเริ่มต้น = ไม่มีซึ่งเหมือนกับของ add_all | 
| format_each | string; or None;
                                     ค่าเริ่มต้น = ไม่มีซึ่งเหมือนกับของ add_all | 
| format_joined | string; or None;
                                     ค่าเริ่มต้น = ไม่มีรูปแบบสตริงรูปแบบที่ไม่บังคับใช้กับสตริงที่รวม สตริงรูปแบบต้องมี "%s" 1 รายการ ตัวยึดตําแหน่ง | 
| omit_if_empty | ค่าเริ่มต้น = จริง หากเป็นจริง หากไม่มีสตริงที่จะผูกเข้าด้วยกัน (เนื่องจาก valuesว่างเปล่าหรือมีการกรองรายการทั้งหมด) การประมวลผลเพิ่มเติมทั้งหมดจะถูกระงับและบรรทัดคำสั่งจะไม่มีการเปลี่ยนแปลง หากเป็น "เท็จ" แม้ว่าจะไม่มีสตริงให้ผนวกเข้าด้วยกัน จะมีอาร์กิวเมนต์ 2 ตัวต่อท้าย นั่นคือ ชื่ออาร์กิวเมนต์ตามด้วยสตริงว่าง (ซึ่งเป็นการรวมตรรกะของสตริงศูนย์) | 
| uniquify | ค่าเริ่มต้น = เท็จ ซึ่งเหมือนกับ add_all | 
| expand_directories | ค่าเริ่มต้น = จริง ซึ่งเหมือนกับ add_all | 
| allow_closure | ค่าเริ่มต้น = เท็จ ซึ่งเหมือนกับ add_all | 
set_param_file_format
Args Args.set_param_file_format(format)
พารามิเตอร์
| พารามิเตอร์ | คำอธิบาย | 
|---|---|
| format | ต้องระบุ ต้องเป็นอย่างใดอย่างหนึ่งต่อไปนี้ 
 รูปแบบมีค่าเริ่มต้นเป็น "shell" หากไม่ได้ถูกเรียก | 
use_param_file
Args Args.use_param_file(param_file_arg, *, use_always=False)
Bazel อาจเลือกที่จะเขียนไฟล์พารามิเตอร์ไปยังแผนผังเอาต์พุตระหว่างการดำเนินการเพื่อประสิทธิภาพ หากคุณกำลังแก้ไขข้อบกพร่องในการดำเนินการและต้องการตรวจสอบไฟล์พารามิเตอร์ ให้ส่ง --materialize_param_files ไปยังบิลด์
          
      
พารามิเตอร์
| พารามิเตอร์ | คำอธิบาย | 
|---|---|
| param_file_arg | ต้องระบุ สตริงรูปแบบที่มี "%s" เดียว หากอาร์กิวเมนต์นี้กระจัดกระจายไปยังไฟล์พารามิเตอร์ ระบบจะแทนที่พารามิเตอร์ด้วยอาร์กิวเมนต์ที่ประกอบด้วยสตริงนี้ซึ่งมีการจัดรูปแบบด้วยเส้นทางของไฟล์พารามิเตอร์ ตัวอย่างเช่น หากระบุอาร์กิวเมนต์ลงในไฟล์พารามิเตอร์ "params.txt" แล้วระบุ "--file=%s" จะทำให้บรรทัดคำสั่งการดำเนินการมี "--file=params.txt" | 
| use_always | ค่าเริ่มต้น = เท็จ ระบุว่าจะส่งอาร์กิวเมนต์ไปยังไฟล์พารามิเตอร์เสมอหรือไม่ หากเป็น "เท็จ" Bazel จะตัดสินใจว่าต้องใส่อาร์กิวเมนต์ตามระบบและความยาวอาร์กิวเมนต์หรือไม่ |