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ğlı olan tüm kitaplıkların ihtiyaç duyduğu her nesne dosyasını listeleyebilir. Bu tür geçişli verilerin, birden fazla hedef tarafından paylaşılabilmesi için depset
içinde depolanması en iyi uygulamadır. Ancak, kural yazarının bir işlem komut satırı oluşturmak için bu alt kümeleri dize listelerine dönüştürmesi gerekseydi bellek paylaşımı optimizasyonu geçersiz olur.
Bu nedenle, işlem oluşturma işlevleri dizelere ek olarak Args
nesnelerini de kabul eder. Her Args
nesnesi, verileri değiştirmek için isteğe bağlı dönüşümlerle birlikte dizelerin ve alt kümelerin birleşmesini temsil eder. Args
nesneleri, komut satırını hesaplama zamanı geldiğinde, yürütme aşamasına kadar kapsülledikleri alt kümeleri 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şturuldu. 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 dönüştürülme şeklini özelleştirmenize olanak tanır. Bir map_each
işlevi sağlamazsanız standart dönüştürme aşağıdaki gibi olur:
- Zaten dize olan değerler olduğu gibi kalır.
File
nesneleriFile.path
değerlerine dönüştürülür.- Diğer tüm türler, belirtilmeyen bir şekilde dizelere dönüştürülür. Bu nedenle, dize veya
File
türü olmayan değerleriadd()
öğesine iletmekten kaçınmalısınız. Ayrıca, bunlarıadd_all()
veyaadd_joined()
işlevine geçirirsenizmap_each
işlevi sağlamanız gerekir.
Dize biçimlendirmesi kullanılırken (add*()
yöntemlerinin format
, format_each
ve format_joined
parametreleri) biçim şablonu, dizelerdeki %
değiştirme işlemi 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üzdeler %%
olarak kod dışına alınabilir. Biçimlendirme, değer yukarıdaki şekilde bir dizeye dönüştürüldükten sonra uygulanır.
add*()
yöntemlerinin her biri, ekstra bir konum parametresini kabul eden alternatif bir biçime sahiptir ve bağımsız değişkenlerin geri kalanından önce eklenecek bir "bağımsız değişken adı" dizesi içerir. add_all
ve add_joined
için dizi boş olursa ekstra dize eklenmez. Örneğin, aynı kullanımla birlikte, belirtilen sıranın 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
eklenebilir.
Komut satırının boyutu sistem tarafından izin verilen maksimum boyuttan daha fazla büyürse, bağımsız değişkenler parametre dosyalarına taşabilir. İlgili konu: use_param_file()
ve set_param_file_format()
.
Örnek: Komut satırını oluşturmak istediğinizi 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 bağımsız değişken ekler.
Parametreler
Parametre | Açıklama |
---|---|
arg_name_or_value
|
gerekli İ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ğerin önüne eklenir. Yalnızca tek bir konum parametresi aktarılırsa value olarak yorumlanır (aşağıya bakın).
|
value
|
default = unbound Eklenecek nesne. Bu parametre, yukarıda bahsedilen standart dönüşüm kullanılarak bir dizeye dönüştürülür. Bu işlevde map_each parametresi olmadığından, value bir dize veya File olmalıdır. Liste, unsur, depset veya dizin File , bu yöntem yerine add_all() veya add_joined() hizmetine geçirilmelidir.
|
format
|
string; or None ;
varsayılan = Yokvalue öğ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 bağımsız değişkenler listesi üzerinden gerçekleşir:
- Her dizindeki
File
öğesi, yine o dizinde bulunan tümFile
öğeleriyle değiştirilir. map_each
verilirse her öğ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 öğeye standart dönüşümün uygulanmasından kaynaklanır.- Listedeki 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 tekrar, geriye kalandır.- Bir
before_each
dizesi verilirse bu dize, listedeki her bağımsız değişkenin önüne yeni bir bağımsız değişken olarak eklenir. Böylece, bu noktaya eklenecek bağımsız değişkenlerin sayısı iki katına çıkar. - Listenin boş ve
omit_if_empty
doğru (varsayılan) olduğu durumlar dışında, bağımsız değişken adı veterminate_with
bağımsız değişken sağlanmışsa sırasıyla birinci ve sonuncu bağımsız değişken olarak eklenir.
Parametreler
Parametre | Açıklama |
---|---|
arg_name_or_values
|
gerekli İ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 values öğesinin önüne eklenir. omit_if_empty doğru değerine ayarlanırsa (varsayılan) 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 adı eklenmez. Yalnızca tek bir konum parametresi aktarılırsa values olarak yorumlanır (aşağıya bakın).
|
values
|
sequence; or depset ;
default = unboundÖğeleri eklenecek liste, tuple veya depset öğesi. |
map_each
|
callable; or None ;
varsayılan = YokHer öğeyi sıfır veya daha fazla dizeye dönüştüren bir işlev. Bu işlev, eklemeden ö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 aktarılır: 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şken oluşturulacağına bağlıdır:
None değerinin döndürülmesi, sırasıyla 1 uzunluk veya 0 uzunlukta bir liste döndürmekle aynı etkiye sahiptir. Bununla birlikte, gerekli olmayan bir liste oluşturmaktan kaçınmak için daha verimli ve okunabilirdir.Normal olarak, Büyük analiz aşaması veri yapılarının yürütme aşamasında istenmeyen şekilde saklanmasını önlemek için Uyarı: |
format_each
|
string; or None ;
varsayılan = Yokmap_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 tane "%s" yer tutucusu olmalıdır.
|
before_each
|
string; or None ;
varsayılan = Yokvalues parametresinden türetilen her bağımsız değişken eklenmeden önce eklenecek isteğe bağlı bir dize.
|
omit_if_empty
|
default = Doğru True (doğru) değerine ayarlanırsa values ürününden türetilen ve eklenecek bağımsız değişken yoksa sonraki tüm işlemler atlanır ve komut satırı değiştirilmez. Yanlış değerine ayarlanırsa bağımsız değişken adı ve terminate_with (sağlanmışsa) başka bağımsız değişkenler olup olmadığına bakılmaksızın yine de eklenir.
|
uniquify
|
default = False Doğru değerine ayarlanırsa values parametresinden 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. Alt sekmelerde yinelemeler atlandığı için genellikle bu özellik gerekli değildir. Ancak map_each birden çok öğe için aynı dizeyi sunuyorsa bu özellik yararlı olabilir.
|
expand_directories
|
default = Doğru True (doğru) değerine ayarlanırsa 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 ;
varsayılan = YokDiğer tüm bağımsız değişkenlerden sonra eklenecek isteğe bağlı bir dize. Bu dize, omit_if_empty doğru değerine ayarlanırsa (varsayılan) ve başka öğe eklenmezse eklenmez (values boşsa veya tüm öğeleri filtrelendiğinde olduğu gibi).
|
allow_closure
|
default = False Doğru değerine ayarlanırsa map_each gibi işlev parametrelerinde kapatma kullanımına izin verir. Bu işlem genellikle gerekli değildir ve büyük analiz aşaması veri yapılarını yürütme aşamasında tutma 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)Ayırıcı kullanarak birden çok değeri birleştirerek bu komut satırına bağımsız değişken ekler. Öğeler, yürütme aşamasında geç işlenir.
İşleme add_all()
ile benzerdir ancak values
öğesinden türetilen bağımsız değişkenlerin listesi, join_with.join(...)
tarafındanymış gibi tek bir bağımsız değişkende birleştirilir ve ardından belirtilen format_joined
dize şablonu kullanılarak biçimlendirilir. add_all()
'den farklı olarak, before_each
veya terminate_with
parametresi yoktur, çünkü bunlar öğeler tek bir bağımsız değişkende birleştirildiğinde genellikle yararlı olmaz.
Filtrelemeden sonra bir bağımsız değişkene eklenecek 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
|
gerekli İ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 values öncesine eklenir. Bu bağımsız değişken, omit_if_empty doğru (varsayılan) ise ve values öğesinden türetilen bir dize yoksa (values boşsa veya tüm öğeleri filtrelenmişse gerçekleşebilir) eklenmez. Yalnızca tek bir konum parametresi aktarılırsa values olarak yorumlanır (aşağıya bakın).
|
values
|
sequence; or depset ;
default = unboundÖğeleri birleştirilecek liste, tuple veya depset. |
join_with
|
gereklistring.join() ile aynı şekilde map_each ve format_each uygulayarak elde edilen dizeleri birleştirmek için kullanılan bir ayırıcı dize.
|
map_each
|
callable; or None ;
varsayılan = Yokadd_all ile aynıdır.
|
format_each
|
string; or None ;
varsayılan = Yokadd_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 tutucusu olmalıdır. |
omit_if_empty
|
default = True 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ştirilmez. Yanlış değerine ayarlanırsa birleştirilecek herhangi 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 dizenin mantıksal birleşimidir).
|
uniquify
|
default = Falseadd_all ile aynıdır.
|
expand_directories
|
default = Doğruadd_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)Parametre dosyasının biçimini ayarlar (bir tane kullanılırsa)
Parametreler
Parametre | Açıklama |
---|---|
format
|
gerekli Şunlardan biri olmalıdır:
Çağrılmazsa, biçim varsayılan olarak "kabuk" olur. |
use_param_file
Args Args.use_param_file(param_file_arg, *, use_always=False)Bağımsız değişkenleri bir params dosyasına döker ve bunların yerine, param dosyasının işaretçisini ekler. 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 parametre dosyasını çıkış ağacına yazmaya başlamayı tercih edebilir. İşlemlerde hata ayıklama yapıyorsanız ve parametre dosyasını incelemek istiyorsanız --materialize_param_files
öğesini derlemenize iletin.
Parametreler
Parametre | Açıklama |
---|---|
param_file_arg
|
gerekli Tek bir "%s" içeren 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 dizeyi içeren bir bağımsız değişkenle değiştirilir. Örneğin, bağımsız değişkenler bir "params.txt" params dosyasına dökülürse, "--file=%s" değerinin belirtilmesi işlem komut satırının "--file=params.txt" dosyasını içermesine neden olur. |
use_always
|
default = False Bağımsız değişkenlerin her zaman bir params dosyasına dökülüp dökülmeyeceği. Yanlışsa Google, sisteminize ve bağımsız değişken uzunluğuna göre bağımsız değişkenlerin dökülmesi gerekip gerekmediğine karar verir. |