Suele suceder que una acción requiere una línea de comandos grande que contenga valores acumulados de dependencias transitivas. Por ejemplo, una línea de comandos del vinculador podría enumerar todos los archivos de objeto que necesitan todas las bibliotecas vinculadas. Una práctica recomendada es almacenar estos datos transitivos en objetos depset, de modo que varios destinos puedan compartirlos. Sin embargo, si el autor de la regla tuviera que convertir estos depsets en listas de cadenas para construir una línea de comandos de acción, se impediría la optimización de uso compartido de memoria.
Por este motivo, las funciones de construcción de acciones aceptan objetos Args, además de cadenas. Cada objeto Args representa una concatenación de cadenas y depsets, con transformaciones opcionales para manipular los datos. Los objetos Args no procesan los depsets que encapsulan hasta la fase de ejecución, cuando llega el momento de calcular la línea de comandos. Esto ayuda a diferir cualquier copia costosa hasta que se complete la fase de análisis. Consulta la página Optimización del rendimiento para obtener más información.
Las Args se construyen llamando a ctx.actions.args(). Se pueden pasar como el parámetro arguments de ctx.actions.run() o ctx.actions.run_shell(). Cada mutación de un objeto Args agrega valores a la línea de comandos eventual.
La función map_each te permite personalizar la forma en que los elementos se transforman en cadenas. Si no proporcionas una función map_each, la conversión estándar se verá de la siguiente manera: 
- Los valores que ya son cadenas se dejan sin modificaciones.
- Los objetos Filese convierten en sus valoresFile.path.
- Todos los demás tipos se convierten en cadenas de una manera no especificada. Por este motivo, debes evitar pasar valores que no sean de tipo de cadena o Fileaadd()y, si los pasas aadd_all()oadd_joined(), debes proporcionar una funciónmap_each.
Cuando se usa el formato de cadena (parámetros format, format_each y format_joined de los métodos add*()), la plantilla de formato se interpreta de la misma manera que la sustitución % en las cadenas, excepto que la plantilla debe tener exactamente un marcador de posición de sustitución y debe ser %s. Los porcentajes literales pueden escaparse como %%. El formato se aplica después de que el valor se convierte en una cadena, como se indica más arriba.
Cada uno de los métodos add*() tiene una forma alternativa que acepta un parámetro posicional adicional: un "nombre del argumento". para insertar antes del resto de los argumentos. Para add_all y add_joined, la cadena adicional no se agregará si la secuencia resulta estar vacía. Por ejemplo, el mismo uso puede agregar --foo val1 val2 val3 --bar o solo --bar a la línea de comandos, en función de si la secuencia dada contiene val1..val3 o está vacía.
Si el tamaño de la línea de comandos puede ser superior al tamaño máximo permitido por el sistema, los argumentos se pueden expandir a los archivos de parámetros. Consulta use_param_file() y set_param_file_format().
Ejemplo: Supongamos que queremos generar la línea de comandos:
--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],
  ...
)
Miembros
add
Args Args.add(arg_name_or_value, value=unbound, *, format=None)
Parámetros
| Parámetro | Descripción | 
|---|---|
| arg_name_or_value | obligatorio Si se pasan dos parámetros posicionales, esto se interpreta como el nombre del argumento. El nombre del argumento se agrega antes del valor sin ningún procesamiento. Si solo se pasa un parámetro posicional, se interpreta como value(consulta a continuación). | 
| value | predeterminado = no delimitado El objeto que se agregará. Se convertirá en una cadena con la conversión estándar mencionada anteriormente. Como no hay un parámetro map_eachpara esta función,valuedebe ser una cadena o unFile. En lugar de este método, se debe pasar una lista, tupla, un depósito o un directorioFileaadd_all()oadd_joined(). | 
| format | string; or None;
                                     predeterminado = NingunoUn patrón de cadena de formato que se aplicará a la versión en cadena de 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)
La mayor parte del procesamiento se lleva a cabo en una lista de argumentos que se agregarán, según los siguientes pasos:
- Cada elemento Filedel directorio se reemplaza por todos losFilecontenidos recursivamente en ese directorio.
- Si se proporciona map_each, se aplica a cada elemento, y las listas de cadenas resultantes se concatenan para formar la lista inicial de argumentos. De lo contrario, la lista de argumentos inicial es el resultado de aplicar la conversión estándar a cada elemento.
- Cada argumento de la lista tiene el formato de format_each, si está presente.
- Si uniquifyes verdadero, se quitan los argumentos duplicados. El primer caso es el que persiste.
- Si se proporciona una cadena before_each, se inserta como un argumento nuevo antes de cada argumento existente en la lista. Esto duplica efectivamente la cantidad de argumentos que se agregarán en este punto.
- Excepto en el caso de que la lista esté vacía y omit_if_emptysea verdadero (el valor predeterminado), el nombre del argumento yterminate_withse insertan como el primer y último argumento, respectivamente, si se presentan.
Parámetros
| Parámetro | Descripción | 
|---|---|
| arg_name_or_values | obligatorio Si se pasan dos parámetros posicionales, esto se interpreta como el nombre del argumento. El nombre del argumento se agrega antes de valuessin ningún procesamiento. No se agregará este nombre de argumento siomit_if_emptyes verdadero (valor predeterminado) y no se agregan otros elementos (como sucede sivaluesestá vacío o se filtran todos sus elementos). Si solo se pasa un parámetro posicional, se interpreta comovalues(consulta a continuación). | 
| values | sequence; or depset;
                                     predeterminado = no delimitadoLa lista, la tupla o el depset cuyos elementos se agregarán. | 
| map_each | callable; or None;
                                     predeterminado = NingunoFunción que convierte cada elemento en cero o más cadenas, que pueden procesarse aún más antes de agregar. Si no se proporciona este parámetro, se usa la conversión estándar. A la función se le pasan uno o dos argumentos posicionales: el elemento que se convertirá, seguido de un  El tipo del valor que se muestra depende de la cantidad de argumentos que se producirán para el elemento: 
 Nonetiene el mismo efecto que mostrar una lista de longitud 1 o longitud 0, respectivamente. Sin embargo, es más eficiente y legible para evitar crear una lista cuando no se necesita.Por lo general, los elementos que son directorios se expanden automáticamente a su contenido cuando se configura  Para evitar la retención involuntaria de estructuras de datos de la fase de análisis de gran tamaño en la fase de ejecución, la función  Advertencia: Las sentencias  | 
| format_each | string; or None;
                                     predeterminado = NingunoUn patrón de string de formato opcional, aplicado a cada string que muestra la función map_each. La cadena de formato debe tener exactamente un “%s” marcador de posición. | 
| before_each | string; or None;
                                     predeterminado = NingunoUna cadena opcional para agregar antes de que se agregue cada argumento derivado de values. | 
| omit_if_empty | default = True Si es verdadero, si no hay argumentos derivados de valuespara agregar, todo el procesamiento posterior se suprime y la línea de comandos no se modificará. Si es falso, se agregarán el nombre del argumento yterminate_with, si se proporcionan, independientemente de que existan o no otros argumentos. | 
| uniquify | predeterminado = Falso Si es verdadero, se omitirán los argumentos duplicados que derivan de values. Solo permanecerá el primer caso de cada argumento. Por lo general, esta función no es necesaria porque los depsets ya omiten duplicados, pero puede ser útil simap_eachemite la misma cadena para varios elementos. | 
| expand_directories | default = True Si es verdadero, cualquier directorio en valuesse expandirá a una lista plana de archivos. Esto sucede antes de que se apliquemap_each. | 
| terminate_with | string; or None;
                                     predeterminado = NingunoString opcional para agregar después de todos los demás argumentos. Esta cadena no se agregará si omit_if_emptyes verdadero (valor predeterminado) y no se agregan otros elementos (como sucede sivaluesestá vacío o se filtran todos sus elementos). | 
| allow_closure | predeterminado = Falso Si es verdadero, permite el uso de cierres en parámetros de función como map_each. Por lo general, esto no es necesario y corre el riesgo de retener grandes estructuras de datos de la fase de análisis en la fase de ejecución. | 
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)
El procesamiento es similar a add_all(), pero la lista de argumentos derivada de values se combina en un solo argumento como si fuera join_with.join(...) y, luego, se le da formato con la plantilla de cadenas format_joined dada. A diferencia de add_all(), no hay parámetros before_each ni terminate_with, ya que, por lo general, no son útiles cuando los elementos se combinan en un solo argumento.
Si después del filtrado no hay cadenas para unir en un argumento, y si omit_if_empty es verdadero (el valor predeterminado), no se realiza ningún procesamiento. De lo contrario, si no hay cadenas para unir, pero omit_if_empty es falso, la cadena unida será una vacía.
          
      
Parámetros
| Parámetro | Descripción | 
|---|---|
| arg_name_or_values | obligatorio Si se pasan dos parámetros posicionales, esto se interpreta como el nombre del argumento. El nombre del argumento se agrega antes de valuessin ningún procesamiento. Este argumento no se agregará siomit_if_emptyes verdadero (el valor predeterminado) y no hay strings derivadas devaluespara unir (lo que puede suceder sivaluesestá vacío o si se filtran todos sus elementos). Si solo se pasa un parámetro posicional, se interpreta comovalues(consulta a continuación). | 
| values | sequence; or depset;
                                     predeterminado = no delimitadoLa lista, la tupla o el depset cuyos elementos se unirán. | 
| join_with | obligatorio Una cadena delimitadora que se usa para unir las cadenas obtenidas a partir de la aplicación de map_eachyformat_each, de la misma manera questring.join(). | 
| map_each | callable; or None;
                                     predeterminado = NingunoIgual que en add_all. | 
| format_each | string; or None;
                                     predeterminado = NingunoIgual que en add_all. | 
| format_joined | string; or None;
                                     predeterminado = NingunoUn patrón de cadena de formato opcional aplicado a la cadena unida. La cadena de formato debe tener exactamente un “%s” marcador de posición. | 
| omit_if_empty | default = True Si es verdadero, si no hay cadenas para unir (ya sea porque valuesestá vacío o porque todos sus elementos están filtrados), todo el procesamiento posterior se suprime y la línea de comandos no se modificará. Si es falso, incluso si no hay cadenas para unir, se anexarán dos argumentos: el nombre del argumento seguido de una cadena vacía (que es la unión lógica de cero cadenas). | 
| uniquify | predeterminado = Falso Igual que en add_all. | 
| expand_directories | default = True Igual que en add_all. | 
| allow_closure | predeterminado = Falso Igual que en add_all. | 
set_param_file_format
Args Args.set_param_file_format(format)
Parámetros
| Parámetro | Descripción | 
|---|---|
| format | obligatorio Debe ser uno de los siguientes: 
 El formato predeterminado es “shell” si no se los llama. | 
use_param_file
Args Args.use_param_file(param_file_arg, *, use_always=False)
Para mayor eficiencia, Bazel puede optar por dejar de escribir el archivo de parámetros en el árbol de resultados durante la ejecución. Si estás depurando acciones y deseas inspeccionar el archivo de parámetros, pasa --materialize_param_files a tu compilación.
          
      
Parámetros
| Parámetro | Descripción | 
|---|---|
| param_file_arg | obligatorio Una cadena de formato con un solo "%s". Si los argumentos se derivan a un archivo de parámetros, se reemplazan por un argumento que consta de esta cadena con formato con la ruta de acceso del archivo de parámetros. Por ejemplo, si los argumentos se vuelcan a un archivo de parámetros "params.txt", especifica "--file=%s" haría que la línea de comandos de acción contenga "--file=params.txt". | 
| use_always | predeterminado = Falso Indica si siempre se deben derramar los argumentos a un archivo de parámetros. Si es falso, Bazel decidirá si los argumentos se deben derramar en función de la longitud del sistema y del argumento. |