Bir 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 kapsayan bir nesne.
Bir işlem için genellikle geçişli bağımlılıklardan toplanan değerleri içeren büyük bir komut satırı gerekir. Örneğin, bir bağlayıcı komut satırı, bağlanan tüm kitaplıkların ihtiyaç duyduğu her nesne dosyasını listeleyebilir. En iyi uygulama, bu tür geçişli verilerin birden fazla hedef tarafından paylaşılabilmesi için depset
'larda depolanmasıdır. Ancak, kural yazarının bir işlem komut satırı oluşturmak için bu ayrıntılı bölümleri dize listelerine dönüştürmesi gerektiyse bu, bellek paylaşımı optimizasyonunu geçersiz kılar.
Bu nedenle, işlem oluşturma işlevleri dizelere ek olarak Args
nesneleri de kabul eder. Her Args
nesnesi, verileri değiştirmek için isteğe bağlı dönüşümlerle birlikte dizelerin ve derinlerin birleşimini temsil eder. Args
nesneleri, komut satırının hesaplanması zamanı geldiğinde yürütme aşamasına kadar içerdikleri belgeleri işlemez. Bu sayede, pahalı kopyalama işlemleri analiz aşaması tamamlanana kadar ertelenebilir. Daha fazla bilgi için Performansı Optimize Etme sayfasına bakın.
Args
, ctx.actions.args()
çağrılarak oluşturulur. Bunlar, ctx.actions.run()
veya ctx.actions.run_shell()
öğesinin arguments
parametresi olarak iletilebilir. Bir Args
nesnesinin her mutasyonu, nihai komut satırına değer ekler.
map_each
özelliği, öğelerin dizelere nasıl dönüştürüleceğini özelleştirmenizi sağlar. map_each
işlevi sağlamazsanız standart dönüşüm aşağıdaki gibi olur:
- Zaten dize olan değerler olduğu gibi bırakılır.
File
nesne,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,
add()
öğesine dize veyaFile
türü olmayan değerleri iletmekten kaçınmanız gerekir. Bunlarıadd_all()
veyaadd_joined()
’e iletirseniz birmap_each
işlevi sağlamanız gerekir.
Dize biçimlendirmesi (add*()
yöntemlerinin format
, format_each
ve format_joined
parametreleri) kullanılırken biçim şablonu, dizelerde %
değiştirme ile aynı şekilde yorumlanır. Tek fark, şablonun tam olarak bir tane değiştirme yer tutucusu içermesi ve %s
olması gerekir. Değişmez yüzde değerleri, %%
olarak kod dışına alınabilir. Biçimlendirme, değer yukarıdaki gibi bir dizeye dönüştürüldükten sonra uygulanır.
add*()
yöntemlerinin her birinin, ekstra konum parametresini (bağımsız değişken adı) kabul eden alternatif bir biçimi vardır. bağımsız değişkenlerin önüne eklenecek bir dize. add_all
ve add_joined
için sıra boş olursa fazladan dize eklenmez. Örneğin, aynı kullanım, belirtilen adım sırasının val1..val3
içerip içermediğine veya boş olmasına bağlı olarak komut satırına --foo val1 val2 val3 --bar
veya yalnızca --bar
eklenebilir.
Komut satırının boyutu sistemin izin verdiği maksimum boyuttan daha uzun olursa bağımsız değişkenler parametre dosyalarına dökülebilir. use_param_file()
ve set_param_file_format()
başlıklı makaleleri inceleyin.
Ö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
|
required İki konumsal parametre iletilirse bu, arg adı olarak yorumlanır. Bağımsız değişken adı, herhangi bir işlem yapılmadan değerin önüne eklenir. Yalnızca bir konumsal parametre iletilirse bu parametre value olarak yorumlanır (aşağıya bakın).
|
value
|
varsayılan değer unbound Eklenecek nesne. Bu değer, yukarıda belirtilen standart dönüşüm kullanılarak bir 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. File adlı liste, unsur, depset veya dizinin bu yöntem yerine add_all() veya add_joined() hizmetine iletilmesi gerekir.
|
format
|
string; veya None ;
varsayılan değer: None value öğesinin dizeleştirilmiş sürümüne uygulanacak bir biçim dizesi kalıbı.
|
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)Bu komut satırına birden çok bağımsız değişken ekler. Öğeler yürütme aşamasında geç işlenir.
İşlemin büyük kısmı, aşağıdaki adımlara göre eklenecek bir bağımsız değişkenler listesi üzerinden gerçekleştirilir:
- Her dizin
File
öğesi, söz konusu dizinde yinelenen şekilde bulunan tümFile
öğeleriyle değiştirilir. map_each
sağlanmışsa her bir öğeye uygulanır ve ortaya çıkan dize listeleri, ilk bağımsız değişken listesini oluşturmak üzere birleştirilir. Aksi takdirde, ilk bağımsız değişken listesi her bir öğeye standart dönüşümün uygulanması sonucunda elde edilir.- Listede bulunan her bağımsız değişken (varsa)
format_each
ile biçimlendirilir. uniquify
Doğru değerine ayarlanırsa yinelenen bağımsız değişkenler kaldırılır. İlk gerçekleşme, kalandır.- Bir
before_each
dizesi sağlanırsa listedeki mevcut her bağımsız değişkenin önüne yeni bir bağımsız değişken olarak eklenir. Böylece bu nokta tarafından eklenecek bağımsız değişken sayısı etkili bir şekilde ikiye katlanır. - Listenin boş olması ve
omit_if_empty
değerinin true (varsayılan) olması dışında, arg adı veterminate_with
(varsa) sırasıyla ilk ve son bağımsız değişken olarak eklenir.
Parametreler
Parametre | Açıklama |
---|---|
arg_name_or_values
|
required İki konumsal parametre iletilirse bu, arg adı olarak yorumlanır. Arg adı, herhangi bir işlem yapılmadan ayrı bir bağımsız değişken olarak values öğesinin önüne eklenir. omit_if_empty doğruysa (varsayılan) ve başka öğe eklenmezse (values boşsa veya tüm öğeleri filtrelenirse olduğu gibi) bu bağımsız değişken adı eklenmez. Yalnızca bir konum parametresi iletilirse values olarak yorumlanır (aşağıya bakın).
|
values
|
sequence veya depset;
varsayılan değer unbound Öğelerinin ekleneceği liste, tuple veya depset. |
map_each
|
callable; veya None ;
varsayılan değer None Her bir öğeyi sıfır veya daha fazla dizeye dönüştüren ve eklemeden önce daha ayrıntılı şekilde işlenebilecek bir işlev. Bu parametre sağlanmazsa standart dönüşüm kullanılır. İşleve bir veya iki konumsal bağımsız değişken iletilir: dönüştürülecek öğe ve ardından isteğe bağlı bir Döndürülen değerin türü, öğe için kaç bağımsız değişkenin oluşturulacağına bağlıdır:
None döndürmek, sırasıyla 1 veya 0 uzunluğunda bir liste döndürmekle aynı etkiye sahiptir. Ancak, gerekmediği durumlarda liste oluşturmaktan kaçınmak daha verimli ve okunaklı bir yöntemdir.Normalde, Büyük analiz aşaması veri yapılarının, yürütme aşamasında amaçlanmayan bir şekilde saklanmasını önlemek için Uyarı: |
format_each
|
string; veya None ;
varsayılan değer: None map_each işlevi tarafından döndürülen her dizeye uygulanan isteğe bağlı biçim dizesi kalıbı. Biçim dizesinde tam olarak bir '%s' bulunmalıdır yer tutucusu içerir.
|
before_each
|
string; veya None ;
varsayılan değer: None values öğesinden türetilen her bağımsız değişkenden önce eklenecek isteğe bağlı bir bağımsız değişken eklenir.
|
omit_if_empty
|
varsayılan değer True True (doğru) değerine ayarlanırsa values işlevinden türetilen eklenebilecek bağımsız değişken yoksa sonraki tüm işlemler atlanır ve komut satırında değişiklik olmaz. Yanlış ise başka bağımsız değişken olup olmadığına bakılmaksızın bağımsız değişken adı ve terminate_with (varsa) eklenir.
|
uniquify
|
varsayılan değer False Doğru değerine ayarlanırsa values öğesinden türetilen yinelenen bağımsız değişkenler atlanır. Her bağımsız değişkenin yalnızca ilk örneği kalır. Etiketler halihazırda yinelenen öğeleri atladığı için bu özellik genellikle gerekli değildir ancak map_each , birden fazla öğe için aynı dizeyi yayınlarsa bu özellik yararlı olabilir.
|
expand_directories
|
varsayılan değer True Doğru değerine ayarlanırsa values alanındaki tüm dizinler düz bir dosya listesine genişletilir. Bu, map_each uygulanmadan önce gerçekleşir.
|
terminate_with
|
dize; veya None ;
varsayılan değer None Diğer tüm bağımsız değişkenlerden sonra eklenecek isteğe bağlı bir bağımsız değişken. omit_if_empty doğru (varsayılan) ise ve başka hiçbir öğe eklenmezse (values boş olduğunda veya tüm öğeleri filtrelendiğinde olduğu gibi) bu bağımsız değişken eklenmez.
|
allow_closure
|
varsayılan değer False Doğru ise map_each gibi işlev parametrelerinde kapatma işlemlerinin kullanılmasına izin verir. Genellikle bu gerekli değildir ve analiz aşamasındaki büyük veri yapılarını yürütme aşamasında tutma riskini alır.
|
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)Ayırıcı kullanarak birden fazla 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()
işlevine benzer, ancak values
öğesinden türetilen bağımsız değişkenler listesi, join_with.join(...)
gibi tek bir bağımsız değişkende birleştirilir ve ardından belirtilen format_joined
dize şablonu kullanılarak biçimlendirilir. Öğeler tek bir bağımsız değişkende birleştirildiğinde genellikle kullanışlı olmadıkları için add_all()
parametresinden farklı olarak before_each
veya terminate_with
parametresi yoktur.
Filtreleme işleminden sonra bir bağımsız değişkenle birleştirilecek dize yoksa ve omit_if_empty
doğruysa (varsayılan) herhangi bir 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
|
zorunlu İki konum parametresi iletilirse bu, bağımsız değişken adı olarak yorumlanır. Bağımsız değişken adı, herhangi bir işlenmeden values öncesine eklenir. omit_if_empty doğru (varsayılan) ise ve birleştirilecek values alanından türetilmiş herhangi bir dize yoksa bu bağımsız değişken, values boşsa veya tüm öğeleri filtrelenirse eklenmez. Yalnızca bir konumsal parametre iletilirse bu parametre values olarak yorumlanır (aşağıya bakın).
|
values
|
sequence veya depset;
varsayılan değer unbound Öğeleri birleştirilecek liste, tuple veya depset. |
join_with
|
requiredmap_each ve format_each uygulandığında elde edilen dizeleri string.join() ile aynı şekilde birleştirmek için kullanılan bir ayırıcı dize.
|
map_each
|
callable; veya None ;
varsayılan değer None add_all ile aynıdır.
|
format_each
|
string; veya None ;
varsayılan değer: None add_all ile aynıdır.
|
format_joined
|
string; veya None ;
varsayılan değer: None Birleştirilen dizeye uygulanan isteğe bağlı bir biçim dizesi kalıbı. Biçim dizesinde tam olarak bir tane "%s" yer tutucu olmalıdır. |
omit_if_empty
|
varsayılan değer True Doğruysa ve birleştirilecek dize yoksa ( values boş olduğu veya tüm öğeleri filtrelendiği için) diğer tüm işlemler atlanır ve komut satırı değişmez. Yanlış ise birleştirilecek 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şimi).
|
uniquify
|
varsayılan değer False add_all ile aynıdır.
|
expand_directories
|
varsayılan değer True add_all ile aynıdır.
|
allow_closure
|
varsayılan değer False add_all ile aynıdır.
|
set_param_file_format
Args Args.set_param_file_format(format)Kullanılıyorsa param dosyasının biçimini ayarlar .
Parametreler
Parametre | Açıklama |
---|---|
format
|
zorunlu Şunlardan biri olmalıdır:
Varsayılan biçim "shell"dir çağrılmaz. |
use_param_file
Args Args.use_param_file(param_file_arg, *, use_always=False)Arg'leri bir parametre dosyasına aktarır ve bunları parametre dosyasına işaret eden bir işaretçiyle değiştirir. Bağımsız değişkenleriniz, sistemin komut uzunluğu sınırları için çok büyük olduğunda kullanın.
Bazel, verimlilik için yürütme sırasında params dosyasının çıkış ağacına yazılmasını atlayabilir. İşlemlerde hata ayıklıyor ve parametre dosyasını incelemek istiyorsanız --materialize_param_files
öğesini derlemenize iletin.
Parametreler
Parametre | Açıklama |
---|---|
param_file_arg
|
required Tek bir "%s" içeren bir biçim dizesi. Bağımsız değişkenler bir params dosyasına dökülürse, params 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" params dosyasına döküldüyse "--file=%s" değeri belirtilir işlem komut satırının "--file=params.txt" içermesine neden olur. |
use_always
|
varsayılan değer False Parametrelerin her zaman bir parametreler dosyasına aktarılıp aktarılmayacağını belirtir. Yanlış ise bazel, sisteminize ve arg uzunluğuna göre bağımsız değişkenlerin dökülmesi gerekip gerekmediğine karar verir. |