Muitas vezes, uma ação exige uma grande linha de comando contendo valores acumulados de dependências transitivas. Por exemplo, uma linha de comando do vinculador pode listar todos os arquivos de objeto necessários para todas as bibliotecas vinculadas. Recomendamos armazenar esses dados transitivos em depsets para que eles possam ser compartilhados por vários destinos. No entanto, se o autor da regra tivesse que converter esses recursos em listas de strings para construir uma linha de comando de ação, essa otimização de compartilhamento de memória seria invalidada.
Por esse motivo, as funções de construção de ações aceitam objetos Args além de strings. Cada objeto Args representa uma concatenação de strings e depsets, com transformações opcionais para manipular os dados. Os objetos Args não processam as dependências que encapsulam até a fase de execução, quando chega a hora de calcular a linha de comando. Isso ajuda a adiar cópias caras até que a fase de análise seja concluída. Consulte a página Como otimizar o desempenho para mais informações.
Args são construídos chamando ctx.actions.args(). Eles podem ser transmitidos como o parâmetro arguments de ctx.actions.run() ou ctx.actions.run_shell(). Cada mutação de um objeto Args anexa valores à linha de comando eventual.
O recurso map_each permite personalizar como os itens são transformados em strings. Se você não fornecer uma função map_each, a conversão padrão será a seguinte: 
- Os valores que já são strings são mantidos como estão.
- Objetos Filesão transformados em seus valoresFile.path.
- Todos os outros tipos são transformados em strings de maneira não especificada. Por esse motivo, evite transmitir valores que não sejam do tipo string ou Fileparaadd(). Se eles forem transmitidos paraadd_all()ouadd_joined(), forneça uma funçãomap_each.
Ao usar a formatação de string (parâmetros format, format_each e format_joined dos métodos add*()), o modelo de formato é interpretado da mesma maneira que a substituição % em strings, exceto que o modelo precisa ter exatamente um marcador de posição de substituição e ser %s. As porcentagens de literal podem ter escape como %%. A formatação é aplicada depois que o valor é convertido em uma string, conforme explicado acima.
Cada um dos métodos add*() tem uma forma alternativa que aceita um parâmetro de posicionamento extra, um "nome do argumento". string a ser inserida antes do restante dos argumentos. Para add_all e add_joined, a string extra não será adicionada se a sequência estiver vazia. Por exemplo, o mesmo uso pode adicionar --foo val1 val2 val3 --bar ou apenas --bar à linha de comando, dependendo se a sequência especificada contém val1..val3 ou está vazia.
Se o tamanho da linha de comando ultrapassar o tamanho máximo permitido pelo sistema, os argumentos poderão ser espalhados nos arquivos de parâmetros. Consulte use_param_file() e set_param_file_format().
Exemplo: suponha que queremos gerar a linha de comando:
--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],
  ...
)
Membros
adicionar
Args Args.add(arg_name_or_value, value=unbound, *, format=None)
Parâmetros
| Parâmetro | Descrição | 
|---|---|
| arg_name_or_value | obrigatório Se dois parâmetros de posição forem passados, isso será interpretado como o nome do argumento. O nome do argumento é adicionado antes do valor, sem qualquer processamento. Se apenas um parâmetro posicional for transmitido, ele será interpretado como value(veja abaixo). | 
| value | padrão = não vinculado O objeto a ser anexado. Ele será convertido em uma string usando a conversão padrão mencionada acima. Como não há um parâmetro map_eachpara essa função,valueprecisa ser uma string ou umFile. Uma lista, tupla, depset ou diretórioFileprecisa ser transmitido paraadd_all()ouadd_joined()em vez deste método. | 
| format | string; or Nonepadrão = NenhumUm padrão de string de formato a ser aplicado à versão em string 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)
A maior parte do processamento ocorre com base em uma lista de argumentos a serem anexados, de acordo com estas etapas:
- Cada item Filedo diretório é substituído por todos osFiles recursivamente contidos nesse diretório.
- Se map_eachfor fornecido, ele será aplicado a cada item, e as listas de strings resultantes serão concatenadas para formar a lista de argumentos inicial. Caso contrário, a lista inicial de argumentos vai ser o resultado da aplicação da conversão padrão a cada item.
- Cada argumento na lista é formatado com format_each, se presente.
- Se uniquifyfor verdadeiro, os argumentos duplicados serão removidos. A primeira ocorrência é a que permanece.
- Se uma string before_eachfor fornecida, ela será inserida como um novo argumento antes de cada argumento atual na lista. Isso dobra efetivamente o número de argumentos a serem anexados a esse ponto.
- Exceto no caso em que a lista está vazia e omit_if_emptyé verdadeiro (o padrão), o nome do argumento eterminate_withsão inseridos como o primeiro e o último argumento, respectivamente, se forem fornecidos.
Parâmetros
| Parâmetro | Descrição | 
|---|---|
| arg_name_or_values | obrigatório Se dois parâmetros de posição forem passados, isso será interpretado como o nome do argumento. O nome do argumento é adicionado antes de valuessem nenhum processamento. Esse nome de argumento não será adicionado seomit_if_emptyfor verdadeiro (padrão) e nenhum outro item for anexado, como acontece quandovaluesestá vazio ou se todos os itens são filtrados. Se apenas um parâmetro posicional for transmitido, ele será interpretado comovalues(veja abaixo). | 
| values | sequence; or depsetpadrão = não vinculadoA lista, a tupla ou o encerramento cujos itens serão anexados. | 
| map_each | callable; or Nonepadrão = NenhumUma função que converte cada item em zero ou mais strings, que podem ser processadas ainda mais antes de anexar. Se esse parâmetro não for fornecido, a conversão padrão será usada. A função recebe um ou dois argumentos posicionais: o item a ser convertido, seguido por um  O tipo do valor de retorno depende de quantos argumentos precisam ser produzidos para o item: 
 Nonetem o mesmo efeito que retornar uma lista de comprimento 1 ou 0, respectivamente. No entanto, é mais eficiente e legível evitar a criação de uma lista onde ela não é necessária.Normalmente, os itens que são diretórios são expandidos automaticamente para o conteúdo quando  Para evitar a retenção não intencional de grandes estruturas de dados na fase de análise na fase de execução, a função  Aviso:as instruções  | 
| format_each | string; or Nonepadrão = NenhumUm padrão de string de formato opcional, aplicado a cada string retornada pela função map_each. A string de formato precisa ter exatamente um "%s" marcador de posição. | 
| before_each | string; or Nonepadrão = NenhumUma string opcional a ser anexada antes de cada argumento derivado de valuesser anexado. | 
| omit_if_empty | padrão = Verdadeiro Se verdadeiro, se não houver argumentos derivados de valuesa serem anexados, todo o processamento adicional será suprimido e a linha de comando não será alterada. Se for falso, o nome do argumento eterminate_with, se fornecido, ainda serão anexados, independentemente de haver ou não outros argumentos. | 
| uniquify | padrão = Falso Se verdadeiro, os argumentos duplicados derivados de valuesserão omitidos. Somente a primeira ocorrência de cada argumento será mantida. Normalmente, esse recurso não é necessário porque os depsets já omitem cópias, mas pode ser útil semap_eachemitir a mesma string para vários itens. | 
| expand_directories | padrão = Verdadeiro Se verdadeiro, todos os diretórios em valuesserão expandidos para uma lista simples de arquivos. Isso acontece antes da aplicação demap_each. | 
| terminate_with | string; or Nonepadrão = NenhumUma string opcional a ser anexada depois de todos os outros argumentos. Essa string não vai ser adicionada se omit_if_emptyfor verdadeiro (padrão) e nenhum outro item for anexado, como acontece quandovaluesestá vazio ou todos os itens são filtrados. | 
| allow_closure | padrão = Falso Se verdadeiro, permite o uso de interdições em parâmetros de função, como map_each. Normalmente, isso não é necessário e arrisca manter grandes estruturas de dados na fase de análise na fase de execução. | 
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)
O processamento é semelhante ao add_all(), mas a lista de argumentos derivados de values é combinada em um único argumento, como se fosse por join_with.join(...), e formatada usando o modelo de string format_joined fornecido. Ao contrário de add_all(), não há o parâmetro before_each ou terminate_with, já que eles geralmente não são úteis quando os itens são combinados em um único argumento.
Se, após a filtragem, não houver strings para mesclar em um argumento e se omit_if_empty for verdadeiro (padrão), nenhum processamento será concluído. Caso contrário, se não houver strings para mesclar, mas omit_if_empty for falso, a string unida será uma string vazia.
          
      
Parâmetros
| Parâmetro | Descrição | 
|---|---|
| arg_name_or_values | obrigatório Se dois parâmetros de posição forem passados, isso será interpretado como o nome do argumento. O nome do argumento é adicionado antes de valuessem nenhum processamento. Esse argumento não será adicionado seomit_if_emptyfor verdadeiro (o padrão) e não houver strings derivadas devaluespara unir (o que pode acontecer sevaluesestiver vazio ou se todos os seus itens estiverem filtrados). Se apenas um parâmetro posicional for transmitido, ele será interpretado comovalues(veja abaixo). | 
| values | sequence; or depsetpadrão = não vinculadoA lista, a tupla ou o encerramento cujos itens serão mesclados. | 
| join_with | obrigatório Uma string delimitadora usada para unir as strings da aplicação de map_eacheformat_each, da mesma maneira questring.join(). | 
| map_each | callable; or Nonepadrão = NenhumO mesmo que em add_all. | 
| format_each | string; or Nonepadrão = NenhumO mesmo que em add_all. | 
| format_joined | string; or Nonepadrão = NenhumUm padrão de string de formato opcional aplicado à string mesclada. A string de formato precisa ter exatamente um "%s" marcador de posição. | 
| omit_if_empty | padrão = Verdadeiro Se verdadeiro, se não houver strings para unir (porque valuesestá vazio ou todos os seus itens estão filtrados), todo o processamento adicional será suprimido e a linha de comando não será alterada. Se for falso, mesmo que não haja strings para unir, dois argumentos serão anexados: o nome do argumento seguido por uma string vazia (que é a junção lógica das strings zero). | 
| uniquify | padrão = Falso O mesmo que em add_all. | 
| expand_directories | padrão = Verdadeiro O mesmo que em add_all. | 
| allow_closure | padrão = Falso O mesmo que em add_all. | 
set_param_file_format
Args Args.set_param_file_format(format)
Parâmetros
| Parâmetro | Descrição | 
|---|---|
| format | obrigatório Deve ser um de: 
 O formato padrão é "shell". se não for chamado. | 
use_param_file
Args Args.use_param_file(param_file_arg, *, use_always=False)
O Bazel pode optar por ignorar a gravação do arquivo de parâmetros na árvore de saída durante a execução para aumentar a eficiência. Se você estiver depurando ações e quiser inspecionar o arquivo de parâmetro, transmita --materialize_param_files para seu build.
          
      
Parâmetros
| Parâmetro | Descrição | 
|---|---|
| param_file_arg | obrigatório Uma string de formato com um único "%s". Se os argumentos forem espalhados para um arquivo params, eles serão substituídos por um argumento que consiste nessa string formatada com o caminho do arquivo params. Por exemplo, se os argumentos forem espalhados para um arquivo de parâmetros "params.txt", especifique "--file=%s" fará com que a linha de comando de ação contenha "--file=params.txt". | 
| use_always | padrão = Falso Define se os argumentos devem sempre ser enviados para um arquivo de parâmetros. Se for falso, o Bazel vai decidir se os argumentos precisam ser espalhados com base no sistema e no comprimento do argumento. |