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ğlanmakta olan 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şılabilmesi için depset
'lerde depolamak en iyi uygulamadır. Ancak kural yazarının bir işlem komut satırı oluşturmak için bu depset'leri dize listelerine dönüştürmesi gerekirse bu bellek paylaşımı optimizasyonu geçersiz olur.
Bu nedenle, işlem oluşturan işlevler dizelere ek olarak Args
nesnelerini de kabul eder. Her Args
nesnesi, verileri değiştirmek için isteğe bağlı dönüşümler içeren dize ve depset dizilişi temsil eder. Args
nesneleri, komut satırının hesaplanması gerektiğinde yürütme aşamasına kadar kapsadıkları depset'leri 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()
için arguments
parametresi olarak iletilebilir. Bir 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ştirmenize olanak tanır. Bir map_each
işlevi sağlamazsanız standart dönüşüm aşağıdaki gibidir:
- Zaten 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ü dışındaki değerleriadd()
'a göndermekten kaçınmalısınız. Bu tür değerleriadd_all()
veyaadd_joined()
'a gönderirseniz birmap_each
işlevi sağlamanız gerekir.
Dize biçimlendirmesi (add*()
yöntemlerinin format
, format_each
ve format_joined
parametreleri) kullanıldığında, biçim şablonu dizelerdeki %
yerine koyma işleviyle aynı şekilde yorumlanır. Tek fark, şablonun tam olarak bir yer tutucu içermesi ve bu yer tutucunun %s
olmasıdır. Değişmez yüzdeler %%
olarak kaçış karakteri ile kullanılabilir. Biçimlendirme, değer yukarıda belirtildiği gibi bir dizeye dönüştürüldükten sonra uygulanır.
add*()
yöntemlerinin her biri, ek bir konumsal parametre (diğer bağımsız değişkenlerden önce eklenecek bir "arg name" dizesi) kabul eden alternatif bir forma sahiptir. add_all
ve add_joined
için, dizi boşsa ek dize eklenmez. Örneğin, aynı kullanım, belirli bir dizinin val1..val3
içerip içermediğine veya boş olup olmadığına bağlı olarak komut satırına --foo val1 val2 val3 --bar
veya yalnızca --bar
ekleyebilir.
Komut satırının boyutu, sistem tarafından izin verilen maksimum boyuttan daha uzun olabilir. Bu durumda bağımsız değişkenler parametre dosyalarına aktarılabilir. use_param_file()
ve set_param_file_format()
başlıklı makaleleri inceleyin.
Örnek: Şu komut satırını oluşturmak istediğimizi varsayalım:
--foo foo1.txt foo2.txt ... fooN.txt --bar bar1.txt,bar2.txt,...,barM.txt --bazAşağıdaki
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. Arg adı, herhangi bir işlem yapılmadan değerden önce eklenir. Yalnızca bir konumsal parametre iletilirse bu parametre value olarak yorumlanır (aşağıya bakın).
|
value
|
default = unbound Eklenecek nesne. 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. Bu yöntem yerine add_all() veya add_joined() 'e bir liste, tuple, depset veya dizin File gönderilmelidir.
|
format
|
string; or None ;
default = Nonevalue değerinin dize haline getirilmiş 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 fazla bağımsız değişken ekler. Öğeler, yürütme aşamasında yavaşça işlenir.
İşlemenin çoğu, aşağıdaki adımlara göre eklenecek bağımsız değişkenler listesi üzerinde gerçekleşir:
- Her dizin
File
öğesi, söz konusu dizinde yinelenen şekilde bulunan tümFile
öğeleriyle değiştirilir. map_each
sağlanırsa her öğeye uygulanır ve elde edilen dize listeleri, ilk bağımsız değişken listesini oluşturmak için birleştirilir. Aksi takdirde, ilk bağımsız değişken listesi, standart dönüşümün her öğeye uygulanmasının sonucudur.- Listede bulunan her bağımsız değişken (varsa)
format_each
ile biçimlendirilir. uniquify
doğruysa yinelenen bağımsız değişkenler kaldırılır. İlk kullanım kalır.- Bir
before_each
dizesi sağlanırsa listedeki her mevcut bağımsız değişkenden önce yeni bir bağımsız değişken olarak eklenir. Bu, bu noktaya kadar eklenecek bağımsız değişken sayısını etkili bir şekilde ikiye katlar. - 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 values öğesinden önce 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 konumsal parametre iletilirse bu parametre values olarak yorumlanır (aşağıya bakın).
|
values
|
sequence; or depset ;
default = unboundÖğelerinin ekleneceği liste, tuple veya depset. |
map_each
|
callable; or None ;
default = NoneHer öğeyi sıfır veya daha fazla dizeye dönüştüren bir işlevdir. Bu işlev, eklenmeden önce daha fazla işlenebilir. 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 üretileceğine 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, dizin olan öğeler Analiz aşamasındaki büyük veri yapılarının yürütme aşamasında istenmeden tutulmasını önlemek için Uyarı: |
format_each
|
string; or None ;
default = Noneİsteğe bağlı bir biçim dizesi kalıbı. map_each işlevi tarafından döndürülen her dizeye uygulanır. Biçim dizesinde tam olarak bir tane "%s" yer tutucu olmalıdır.
|
before_each
|
string; or None ;
default = Nonevalues öğesinden türetilen her bağımsız değişken eklenmeden önce eklenecek isteğe bağlı bir dize.
|
omit_if_empty
|
varsayılan = Doğru Doğru ise ve values 'dan türetilmiş eklenecek birer bağımsız değişken yoksa diğer tüm işlemler engellenir ve komut satırı değişmez. 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 = False Doğruysa 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. Depset'ler zaten yinelenenleri atladığı için genellikle bu özelliğe ihtiyaç duyulmaz ancak map_each birden fazla öğe için aynı dizeyi gönderiyorsa bu özellik yararlı olabilir.
|
expand_directories
|
varsayılan = True Doğru ise values içindeki tüm dizinler düz bir dosya listesine genişletilir. Bu, map_each uygulanmadan önce gerçekleşir.
|
terminate_with
|
string; or None ;
default = NoneDiğer tüm bağımsız değişkenlerden sonra eklenecek isteğe bağlı bir dize. omit_if_empty doğruysa (varsayılan) ve başka öğe eklenmezse (values boşsa veya tüm öğeleri filtrelenirse olduğu gibi) bu dize eklenmez.
|
allow_closure
|
default = False Doğru ise map_each gibi işlev parametrelerinde kapatma işlemlerinin kullanılmasına izin verir. Bu genellikle gerekli değildir ve analiz aşamasındaki büyük veri yapılarının yürütme aşamasında tutulma riski vardı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)Bir ayırıcı kullanarak birden fazla değeri birbirine bağlayarak bu komut satırına bir bağımsız değişken ekler. Öğeler, yürütme aşamasında yavaşça işlenir.
İşleme, add_all()
işlevine benzer ancak values
bağımsız değişkeninden türetilen bağımsız değişken listesi, join_with.join(...)
işlevi 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 yararlı olmadıkları için add_all()
'ten 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
|
required İki konumsal parametre iletilirse bu, arg adı olarak yorumlanır. Arg adı, herhangi bir işlem yapılmadan values öğesinden önce eklenir. omit_if_empty doğruysa (varsayılan) ve values 'ten birleştirilecek dize yoksa (values boşsa veya tüm öğeleri filtrelenmişse bu durum oluşabilir) bu bağımsız değişken eklenmez. Yalnızca bir konumsal parametre iletilirse bu parametre values olarak yorumlanır (aşağıya bakın).
|
values
|
sequence; or depset ;
default = 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; or None ;
default = Noneadd_all ile aynıdır.
|
format_each
|
string; or None ;
default = Noneadd_all ile aynıdır.
|
format_joined
|
string; or None ;
varsayılan = YokBirleş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 = Doğru Doğru ise 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
|
default = Falseadd_all ile aynıdır.
|
expand_directories
|
default = Trueadd_all ile aynıdır.
|
allow_closure
|
default = Falseadd_all ile aynıdır.
|
set_param_file_format
Args Args.set_param_file_format(format)Kullanılıyorsa parametre dosyasının biçimini ayarlar
Parametreler
Parametre | Açıklama |
---|---|
format
|
required Şu değerlerden biri olmalıdır:
Çağırılmazsa biçim varsayılan olarak "shell" olur. |
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ının işaretçisiyle değiştirir. args parametreniz sistemdeki komut uzunluğu sınırları için çok büyük olabileceğinde 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ıklama yapıyorsanız ve parametre dosyasını incelemek istiyorsanız derlemenize --materialize_param_files
parametresini iletin.
Parametreler
Parametre | Açıklama |
---|---|
param_file_arg
|
required Tek bir "%s" içeren bir biçim dizesi. args 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" adlı bir parametre dosyasına dökülürse "--file=%s" belirtildiğinde işlem komut satırında "--file=params.txt" yer alır. |
use_always
|
default = False Her zaman args parametrelerini bir params dosyasına aktarıp aktarmayacağı. Yanlış ise bazel, sisteminize ve arg uzunluğuna göre bağımsız değişkenlerin dökülmesi gerekip gerekmediğine karar verir. |