Kaküller

Sorun bildirin Kaynağı göster

Komut satırının bir kısmını veya tamamını oluşturmak için gereken verileri bellek açısından verimli bir şekilde kaplayan bir nesne.

Bir işlem genellikle geçişli bağımlılıklardan toplanan değerleri içeren büyük bir komut satırı gerektirir. Örneğin, bir bağlayıcı komut satırı, bağlantı verilen tüm kitaplıkların ihtiyaç duyduğu her nesne dosyasını listeleyebilir. Bu tür geçişli verileri birden fazla hedef tarafından paylaşılabilmeleri için depset'te depolamanız önerilir. Ancak, kural yazarının bir eylem komut satırı oluşturmak için bu dizeleri dize listelerine dönüştürmesi gerekiyorsa bu bellek paylaşımı optimizasyonunu geçersiz kılar.

Bu nedenle, işlemi oluşturan işlevler dizelere ek olarak Args nesnelerini kabul eder. Her Args nesnesi, verilerin manipüle edilmesi için isteğe bağlı dönüşümleri de içeren bir dize ve dizelerin bir birleşimini temsil eder. Args nesneleri, komut satırını hesaplama zamanı gelene kadar, kapsadıkları depoları işleme aşamasına kadar işlemez. Bu sayede, pahalı kopyalama işlemlerini analiz aşaması tamamlanana kadar erteleyebilirsiniz. Daha fazla bilgi için Performansı Optimize Etme sayfasına bakın.

Args, ctx.actions.args() çağrısı yapılarak oluşturulur. Bunlar, ctx.actions.run() veya ctx.actions.run_shell() parametresinin arguments parametresi olarak aktarılabilir. Args nesnesinin her mutasyonu, nihai komut satırına değerler ekler.

map_each özelliği, öğelerin dizelere nasıl dönüştürüleceğini özelleştirmenizi sağlar. Bir map_each işlevi sağlamazsanız standart dönüşüm aşağıdaki gibi olur:

  • Dize olan değerler olduğu gibi bırakılır.
  • File nesneleri File.path değerlerine dönüştürülür.
  • Diğer tüm türler, belirtilmemiş bir şekilde dizelere dönüştürülür. Bu nedenle, dize veya File türünde olmayan değerleri add() öğesine iletmekten kaçınmanız gerekir. Ayrıca, bunları add_all() veya add_joined() öğesine geçirirseniz bir map_each işlevi sağlamanız gerekir.

Dize biçimlendirmesini (add*() yöntemlerinin format, format_each ve format_joined parametreleri) kullanırken biçim şablonu dizeler üzerinde % ile aynı şekilde değerlendirilir. Tek fark, şablonun tam olarak bir ikame yer tutucusuna sahip olması ve %s olması gerektiğidir. Değişmez yüzdelik değerler %% olarak kod dışına alınabilir. Değer, yukarıdaki şekilde bir dizeye dönüştürüldükten sonra biçimlendirme uygulanır.

add*() yöntemlerinin her birinde ekstra bir konum parametresi kabul eden alternatif bir form vardır. Bu parametre, bağımsız değişkenlerin geri kalanından önce eklenecek bir "bağımsız ad" dizesidir. Dizi boşsa add_all ve add_joined için ekstra dize eklenmez. Örneğin, aynı kullanım, belirtilen adımın val1..val3 içermesine veya boş olmasına bağlı olarak komut satırına --foo val1 val2 val3 --bar ya da sadece --bar ekleyebilir.

Komut satırının boyutu sistemin izin verdiği maksimum boyuttan daha uzunsa bağımsız değişkenler, parametre dosyalarına taşabilir. Bkz. use_param_file() ve set_param_file_format().

Örnek: Komut satırını oluşturmak istediğimizi varsayalım:

--foo foo1.txt foo2.txt ... fooN.txt --bar bar1.txt,bar2.txt,...,barM.txt --baz
Şu Args nesnesini kullanabiliriz:
# 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],
  ...
)

Üyeler

add

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

Bu komut satırına bir bağımsız değişken ekler.

Parametreler

Parametre Açıklama
arg_name_or_value gereklidir
İki konum parametresi aktarılırsa bağımsız değişken adı olarak yorumlanır. Bağımsız değişken adı, herhangi bir işlem yapılmadan değerden önce eklenir. Yalnızca bir konum parametresi iletilirse value olarak yorumlanır (aşağıya bakın).
value default = unbound
Eklenecek nesne. Yukarıda belirtilen standart dönüşüm kullanılarak dizeye dönüştürülür. Bu işlev için map_each parametresi olmadığından, value bir dize veya File olmalıdır. Bu yöntem yerine add_all() veya add_joined() platformuna File adlı liste, unsur, depent veya dizin iletilmelidir.
format string; or None; default = Yok
value dize haline getirilmiş sürümüne uygulanacak bir biçim dizesi kalıbı.

tümünü_ekle

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)

Bu komut satırına birden çok bağımsız değişken ekler. Öğeler, yürütme aşamasında geç işlenir.

İşlemenin büyük bir kısmı, aşağıdaki adımlara göre eklenecek bağımsız değişkenler listesinde gerçekleşir:

  1. Her dizin File öğesinin yerini, ilgili dizinde bulunan tüm File öğeleri alır.
  2. map_each verilirse bu, her öğeye uygulanır ve ortaya çıkan dize listeleri ilk bağımsız değişken listesini oluşturacak şekilde birleştirilir. Aksi takdirde ilk bağımsız değişken listesi, standart dönüşümün her bir öğeye uygulanmasından kaynaklanır.
  3. Listedeki her bağımsız değişken varsa format_each ile biçimlendirilir.
  4. uniquify doğruysa yinelenen bağımsız değişkenler kaldırılır. Tekrar ilki kalır.
  5. Bir before_each dizesi verilirse bu dize, listedeki her bağımsız değişkenden önce yeni bir bağımsız değişken olarak eklenir. Bu şekilde, bu noktanın sonuna eklenecek bağımsız değişken sayısı iki katına çıkarılır.
  6. Sırası boşsa ve omit_if_empty doğruysa (varsayılan) argüman adı ve terminate_with verilirse sırasıyla ilk ve son bağımsız değişkenler olarak eklenir.
Boş dizelerin, tüm bu işleme adımlarına tabi olan geçerli bağımsız değişkenler olduğunu unutmayın.

Parametreler

Parametre Açıklama
arg_name_or_values gereklidir
İki konum parametresi aktarılırsa bağımsız değişken adı olarak yorumlanır. Bağımsız değişken adı, values olmadan önce ayrı bir bağımsız değişken olarak herhangi bir işlem yapılmadan eklenir. omit_if_empty doğruysa (varsayılan) bu bağımsız değişken adı eklenmez ve başka hiçbir öğe eklenmez (values boşsa veya tüm öğeleri filtrelendiğinde olduğu gibi). Yalnızca bir konum parametresi iletilirse values olarak yorumlanır (aşağıya bakın).
values sequence; or depset; default = unbound
Listesine eklenecek öğeler, ekleme veya sonlandırılacak.
map_each callable; or None; default = Yok
Her bir öğeyi sıfıra veya daha fazla dizeye dönüştüren, ancak eklenmeden önce daha fazla işlenebilen bir işlev. Bu parametre sağlanmazsa standart dönüşüm kullanılır.

İşlev, bir veya iki konum bağımsız değişkenine dönüştürülür: Dönüştürülecek öğe ve ardından, isteğe bağlı bir DirectoryExpander. İkinci bağımsız değişken yalnızca sağlanan işlev kullanıcı tanımlıysa (yerleşik değil) ve birden fazla parametre bildirdiğinde iletilir.

İade değerinin türü, öğe için kaç bağımsız değişken üretileceğine bağlıdır:

  • Her bir öğenin bir dizeye dönüştüğü yaygın durumlarda, işlev bu dizeyi döndürmelidir.
  • Öğe tamamen filtrelenecekse işlev None değerini döndürmelidir.
  • Öğe birden fazla dizeye dönüşürse işlev, bu dizelerin listesini döndürür.
Tek bir dize veya None döndürme, sırasıyla 1 veya 0 uzunluk listesini döndürmeyle aynı etkiye sahiptir. Ancak gerekli olmayan bir liste oluşturmaktan kaçınmak daha verimli ve okunabilirdir.

Normalde, expand_directories=True ayarlandığında dizin olan öğeler otomatik olarak içeriklerinin içine genişletilir. Ancak bu durumda diğer değerlerde bulunan dizinler genişletilmez (ör. öğeler, dizin olarak alan içeren yapılar olduğunda). Bu durumda, DirectoryExpander bağımsız değişkeni belirli bir dizindeki dosyaları manuel olarak almak için uygulanabilir.

Büyük analiz aşaması veri yapılarının yürütme aşamasında istenmeyen şekilde saklanmaması için map_each işlevi, üst düzey bir def ifadesiyle tanımlanmalıdır. Varsayılan olarak iç içe yerleştirilmiş bir işlev kapatma işlemi olmayabilir.

Uyarı: map_each çağrısı sırasında yürütülen print() ifadeleri, görünür bir çıkış oluşturmaz.

format_each string; or None; default = Yok
map_each işlevi tarafından döndürülen her dizeye uygulanan isteğe bağlı bir biçim dizesi kalıbı. Biçim dizesinde tam olarak bir "%s" yer tutucusu olmalıdır.
before_each string; or None; default = Yok
values kaynaklı tüm bağımsız değişkenler eklenmeden önce eklenecek isteğe bağlı bir bağımsız değişken.
omit_if_empty default = True
Doğru ise, eklenecek values bağımsız değişkeni yoksa tüm diğer işlemler atlanır ve komut satırı değişmez. Yanlışsa, bağımsız değişken adı ve sağlanmışsa terminate_with, başka bağımsız değişkenler olup olmadığına bakılmaksızın eklenir.
uniquify default = False
Doğru ise, values ürününden türetilen yinelenen bağımsız değişkenler atlanır. Her bağımsız değişkenin yalnızca ilk tekrarı kalır. Etiketler zaten yinelenenleri dahil etmediğinden bu özellik genellikle gerekli değildir ancak map_each birden fazla öğe için aynı dizeyi yayınlıyorsa yararlı olabilir.
expand_directories default = Doğru
Doğruysa, values içindeki tüm dizinler düz bir dosya listesine genişletilir. Bu işlem, map_each uygulanmadan önce gerçekleşir.
terminate_with string; or None; default = Yok
Diğer tüm bağımsız değişkenlerden sonra eklenecek isteğe bağlı bir bağımsız değişkendir. omit_if_empty doğru (varsayılan) ise ve başka hiçbir öğe eklenmezse (values boşsa veya tüm öğeleri filtrelendiğinde olduğu gibi) bu bağımsız değişken eklenmez.
allow_closure default = False
Doğru ise, map_each gibi işlev parametrelerinde kapatmaların kullanılmasına izin verir. Genellikle buna gerek yoktur ve büyük analiz aşaması veri yapılarının yürütme aşamasında saklanma riski vardır.

katılma_birleştirildi

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)

Ayırıcı kullanarak birden çok değeri birleştirerek bu komut satırına bir bağımsız değişken ekler. Öğeler, yürütme aşamasında geç işlenir.

İşleme, add_all() ile benzerdir ancak values ürününden türetilen bağımsız değişkenler listesi join_with.join(...) tarafından tek bir bağımsız değişkende birleştirilir ve ardından, verilen format_joined dize şablonu kullanılarak biçimlendirilir. add_all() işlevinden farklı olarak, öğeler tek bir bağımsız değişkende birleştirildiğinde bunlar genellikle kullanışlı olmadığından before_each veya terminate_with parametresi yoktur.

Filtrelemeden sonra, bağımsız değişkene eklenecek hiçbir dize yoksa ve omit_if_empty doğruysa (varsayılan) işlem yapılmaz. Aksi takdirde, birleştirilecek dize yoksa ancak omit_if_empty yanlışsa birleştirilen dize boş bir dize olur.

Parametreler

Parametre Açıklama
arg_name_or_values gereklidir
İki konum parametresi aktarılırsa bağımsız değişken adı olarak yorumlanır. Bağımsız değişken adı, values tarihinden önce herhangi bir işlem yapılmadan eklenir. omit_if_empty doğruysa (varsayılan) ve values ürününden türetilen bir dize yoksa (values boşsa veya tüm öğeleri filtrelendiğinde olabilir) bu bağımsız değişken eklenmez. Yalnızca bir konum parametresi iletilirse values olarak yorumlanır (aşağıya bakın).
values sequence; or depset; default = unbound
Listesi, öğeleri veya birleştirilecek liste.
join_with gereklidir
map_each ve format_each işaretlemelerinden elde edilen dizeleri string.join() ile aynı şekilde birleştirmek için kullanılan bir sınırlayıcı dizesi.
map_each callable; or None; default = Yok
add_all ile aynıdır.
format_each string; or None; default = Yok
add_all ile aynıdır.
format_joined string; or None; default = Yok
Birleştirilen dizeye uygulanan isteğe bağlı bir biçim dizesi kalıbı. Biçim dizesinde tam olarak bir "%s" yer tutucusu olmalıdır.
omit_if_empty default = True
Doğru ise, birleştirilecek dize yoksa (values boş olduğundan veya tüm öğeleri filtrelendiğinden) sonraki tüm işlemler atlanır ve komut satırında değişiklik yapılmaz. Yanlış ise, birleştirilecek bir dize olmasa bile iki bağımsız değişken eklenir: bağımsız değişken adı ve ardından boş bir dize (sıfır dizelerin mantıksal birleşimidir).
uniquify default = False
add_all ile aynıdır.
expand_directories default = True (Doğru)
add_all için aynıdır.
allow_closure default = False
add_all ile aynıdır.

set_param_file_format

Args Args.set_param_file_format(format)

Parametre dosyasının biçimini (kullanılıyorsa) ayarlar

Parametreler

Parametre Açıklama
format zorunlu
Şunlardan biri olmalıdır:
  • "çoklu satır": Her öğe (bağımsız ad veya değer) parametre dosyasına, ardından gelen yeni satır karakterleriyle tam olarak yazılır.
  • "shell": "çoklu satır" ile aynıdır ancak öğeler kabuklu olarak alıntılanmıştır
  • "flag_per_line": "çoklu çizgi" ile aynıdır, ancak (1) parametre dosyasına yalnızca işaretleri ('--' ile başlayan) ve (2) işaretin değerleri (varsa) aynı satıra '=' ayırıcısıyla yazılır. Bu, Abseil flag'leri kitaplığının beklediği biçimdir.

Biçim çağrılmazsa varsayılan olarak "kabuk" şeklinde ayarlanır.

use_param_file

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

Bağımsız değişkenleri bir parametre dosyasına döker ve bunları parametre dosyasının işaretçisiyle değiştirir. Bağımsız değişkenlerin, sistemin komut uzunluğu sınırları için çok büyük olabileceği durumlarda kullanın.

Bazel, verimlilik için yürütme sırasında parametreler dosyasını çıkış ağacına yazmayı seçebilir. Hata ayıklama işlemleri gerçekleştiriyor ve parametre dosyasını incelemek istiyorsanız derlemenize --materialize_param_files iletin.

Parametreler

Parametre Açıklama
param_file_arg gereklidir
Tek bir "%s" içeren bir biçim dizesi. Bağımsız değişkenler bir parametre dosyasına dökülürse bunlar, parametre dosyasının yoluyla biçimlendirilmiş bu dizeden oluşan bir bağımsız değişkenle değiştirilir.

Örneğin, bağımsız değişkenler "params.txt" parametre dosyasına dökülürse "--file=%s" belirtilmesi işlem komut satırının "--file=params.txt" içermesine neden olur.

use_always default = False
Bağımsız değişkenlerin her zaman bir parametre dosyasına dökülüp dökülmeyeceği. Yanlış ise pazar, sisteminize ve bağımsız değişken uzunluğuna bağlı olarak bağımsız değişkenlerin dökülmesi gerekip gerekmediğine karar verir.