Jython ile wsadmin komut dosyası oluşturmayı kullanma
Jython, Python'un alternatif bir uygulamasıdır ve tamamen Java™' a yazılır.
Wsadmin aracı Jython V2.1olanağını kullanır. Aşağıdaki bilgiler Jython sözdizimine ilişkin temel bir özettir. Tüm örnek kodlarda, satır başındaki => gösterimi komut ya da işlev çıkışını gösterir.
Temel işlev
İşlev, yerleşik bir işlevin adı ya da Jython işlevi. Örneğin, aşağıdaki işlevler "Hello, World!" (Merhaba, Dünya) geri döner. çıkış olarak:
print "Hello, World!"
=>Hello, World!
import sys
sys.stdout.write("Hello World!\n")
=>Hello, World!Örnekte, print standart çıkış akımını tanımlar. Önceki örnek gibi içe aktarma deyimlerini çalıştırarak yerleşik modülü kullanabilirsiniz. Deyimin içe aktarılması, içe aktarmanın bir parçası olarak bir modülde kodu çalıştırır ve modül nesnesini döndürür. sys , Python dilinin yerleşik bir modüldür. Python dilindeki modüller, adların oluşturulduğu yerler olan ad boşluklarıdır. Modüllerde bulunan adlara öznitelik adı verilir. Modüller, dosyalara karşılık gelir ve Python dili, dosyada tanımlı olan tüm adları içerecek bir modül nesnesi oluşturur. Diğer bir deyişle, modüller ad boşluklarıdır.
output =
AdminControl.invoke(mbean)) ve ardından print outputdeğerini kullanın. NLS çevrilmiş karakterlerini doğru biçimde içeren dizgileri doğru dönüştürmek için Jython print komutunu kullanın.Değişken
Adlara nesne atamak için, atamanın hedefi, eşittir işaretinin (=) ilk tarafına ve diğer tarafa atadığınız nesnenin ilk tarafına geçer. Birinci taraftaki hedef bir ad ya da nesne bileşeni olabilir ve diğer taraftaki nesne, bir nesneyi hesaplayan, isteğe bağlı bir ifade olabilir. Adlara nesne atamak için aşağıdaki kurallar vardır:
- Atamalar nesne başvuruları yaratır.
- Adlar, bunları atadığınızda oluşturulur.
- Gönderme işleminden önce bir ad atamanız gerekir.
Değişken adı kuralları C dilinin kuralları gibidir; örneğin, değişken adları bir alt çizgi karakteri (_) ya da bir harf artı herhangi bir sayıda harf, sayı ya da alt çizgi içerebilir.
- ve
- Doğrulama
- kesme
- sınıf
- devam et
- F
- Del
- elif
- başka
- dışında
- ekec
- sonunda
- -
- başlangıç:
- genel
- if
- içe aktarma
- içinde
- :
- lamda
- değil
- ya da
- geçer
- yazdır
- yükselt
- geri dönüş
- dene
- Ancak
Örneğin:
a = 5
print a
=> 5
b = a
print b
=> 5
text1, text2, text3, text4 = 'good', 'bad', 'pretty', 'ugly'
print text3
=> prettyİkinci örnek, değişkenin a değerini b değişkenine atar.
Tipler ve işleçler
Aşağıdaki listede yerleşik nesne tipleri örnekleri yer almaktadır:
- Sayılar. Örneğin:
8, 3.133, 999L, 3+4j num1 = int(10) print num1 => 10 - Strings. Örneğin:
'name', "name's", '' print str(12345) => '12345' - Listeler. Örneğin:
x = [1, [2, 'free'], 5] y = [0, 1, 2, 3] y.append(5) print y => [0, 1, 2, 3, 5] y.reverse() print y => [5, 3, 2, 1, 0] y.sort() print y => [0, 1, 2, 3, 5] print list("apple") => ['a', 'p', 'p', 'l', 'e'] print list((1,2,3,4,5)) => [1, 2, 3, 4, 5] test = "This is a test" test.index("test") => 10 test.index('s') => 3
Aşağıdaki listede işleçlere ilişkin örnekler yer almaktadır:
- x ya da y
y yanlızca x false olursa değerlendirilir. Örneğin:
print 0 or 1 => 1 - x ve y
y yalnızca x true ise değerlendirilir. Örneğin:
print 0 and 1 => 0 - x + y, x-y
Ek ve bitiştirme, çıkarma. Örneğin:
print 6 + 7 => 13 text1 = 'Something' text2 = ' else' print text1 + text2 => Something else list1 = [0, 1, 2, 3] list2 = [4, 5, 6, 7] print list1 + list2 => [0, 1, 2, 3, 4, 5, 6, 7] print 10 - 5 => 5 - x * y, x/y, x% y
Çarpma ve yineleme, bölme, geri kalan ve biçim. Örneğin:
print 5 * 6 => 30 print 'test' * 3 => test test test print 30 / 6 => 5 print 32 % 6 => 2 - x [ i], x [ i:j], x (...)
Dizinleme, dilimleme, işlev çağrıları. Örneğin:
test = "This is a test" print test[3] => s print test[3:10] => s is a print test[5:] => is a test print test[:-4] => This is a print len(test) => 14 - <, < =, >, > =, ==, < >,! =, is değildir
Karşılaştırma operatörleri, kimlik testleri. Örneğin:
L1 = [1, ('a', 3)] L2 = [1, ('a', 2)] L1 < L2, L1 == L2, L1 > L2, L1 <> L2, L1 != L2, L1 is L2, L1 is not L2 => (0, 0, 1, 1, 1, 0, 1)
Ters eğik çizgi yerine koyma
Bir deyimin birden çok satıra yayılması gerekiyorsa, sonraki satıra devam ettiğini belirtmek için önceki satırın sonuna bir eğik çizgi (\) de ekleyebilirsiniz. Ters eğik çizgi karakteri olarak, özellikle sekmeler ya da boşluklar olmak üzere boş boşluk karakterleri kullanmayın. Örneğin:
text = "This is a test of a long lines" \
" continuing lines here."
print text
=> This is a test of a long lines continuing lines here.İşlevler ve kapsam
def deyimini kullanır. İşlevlerle ilgili deyimler şunlardır:def,returndefdeyimi, birobjectişlevi yaratır ve bunu bir ada atar.returndeyimi, çağıran kişiye bir sonuç nesnesi gönderir. Bu isteğe bağlıdır ve bu değer yoksa, denetim akışının işlev gövdesinden düşeceği için bir işlev çıkar.globalglobaldeyimi, atanacak modül düzeyindeki değişkenleri bildirir. Varsayılan olarak, bir işlevde atanan tüm adlar bu işlev için yereldir ve yalnızca işlev çalışırken var olur. Kapsayan modülde bir ad atamak için, genel bir deyimde işlevler listelemeniz gerekir.
Bir işlevi tanımlamak için temel sözdizimi aşağıdaki gibi olur:
def name (arg1, arg2, ... ArgN)
statements
return valueBurada ad , tanımlanmakta olan işlevin adıdır. Bunu, bir açma ayracı, bir kapama ayracı ve iki nokta üst üste işaretiyle takip eder. Ayraç içindeki bağımsız değişkenler, yordamlara ilişkin parametrelerin bir listesini içerir. İki nokta üst üste işareti izleyen sonraki satır işlevin gövdesidir. İşleve ilişkin göveyi oluşturan komutlardan oluşan bir grup. Bir Jython işlevi tanımladıktan sonra, bu işlev yalnızca yerleşik işlevler gibi kullanılır. Örneğin:
def intersect(seq1, seq2):
res = []
try:
for x in seq1:
if x in seq2:
res.append(x)
except:
pass
return resBu işlevi çağırmak için aşağıdaki komutu kullanın:
s1 = "SPAM"
s2 = "SCAM"
intersect(s1, s2)
=> [S, A, M]
intersect([1,2,3], (1.4))
=> [1] Açıklamalar
Jython dilinde, paund karakteri (#) ile açıklama yapın.
Komut satırı bağımsız değişkenleri
Jython kabukları, komut satırı bağımsız değişkenlerini sys.argv' in değeri olarak komut dosyasına iletir. wsadmin Jython 'da programın adı ya da komut dosyası sys.argv' in bir parçası değildir. wsadmin Jython 'dan farklı olarak, Jython bağımsız değişkeni komut dosyasını komut dosyasının ilk bağımsız değişkeni olarak alır. sys.argv bir dizi olduğu için, bağımsız değişken listesinden öğeleri almak için dizin komutunu kullanın. Örneğin, test.py , a, b ve c olmak üzere üç bağımsız değişken alır.
wsadmin -f test.py a b ctest.py içeriği:
import sys
first = sys.argv[0]
second = sys.argv[1]
third = sys.argv[2]
arglen = len(sys.argv)Temel deyimler
İki döngüye sahip deyim vardır: while ve for. Koşullu deyim ifolur. Hata işleme bildirimi: try. Son olarak, denetim akışını imzalamak için bazı deyimler vardır: break, continueve pass.
- if
ifdeyimi gerçekleştirilecek işlemleri seçer.ifdeyimi, diğerifdeyimleri de içinde olmak üzere diğer deyimleri içerebilir.ifdeyimi, isteğe bağlı bir ya da daha çokelifdeyimi tarafından izlenebilir ve isteğe bağlı birelsebloku ile sona erdirilebilir.Aşağıdaki gibi görünüyorsa, genel biçim şöyledir:
if test1 statements1 elif test2 statements2 else statements3Örneğin:
weather = 'sunny' if weather == 'sunny': print "Nice weather" elif weather == 'raining': print "Bad weather" else: print "Uncertain, don't plan anything"- Ancak
whiledeyimi, bir sınama ifadesi olan bir üstbilgi satırından, bir ya da daha çok girintili deyimin gövdesinden ve denetim, kesme deyiminde çalıştırılmadan döngüden çıkıyorsa çalışan isteğe bağlı birelsedeyimi ile oluşur.whiledeyimi, üstbilgi satırındaki bir test gerçek değeri değerlendirmeye devam ettiği sürece, yinelenen deyimlerin bir bloğunu sürekli olarak çalıştırır. Aşağıdakiwhileiçin bir örnek verilmiştir:while test1 statements1 else statements2Örneğin:
a = 0; b = 10 while a < b: print a a = a + 1- -
fordeyimi, bir atama hedefini ya da hedeflerini belirten bir üstbilgi çizimiyle birlikte başlar ve içinden adım atmasını istediğiniz bir nesneyle birlikte başlar. Üstbilgi, ardından yinelemek istediğiniz girintili deyimlerin bir bloku tarafından izlenmiş olur.Aşağıda bir
fordeyimi örneği verilmiştir:for target in object: statements else: statementsSıra nesnesindeki öğeleri birer birer hedefle hedefe atar ve her biri için döngü gövini çalıştırır. Döngü gövdesi genellikle, sırayla yürürlükteki öğeye gönderme yapmak için atama hedefini kullanır; bu hedef, sıra boyunca bir imleç adımmış gibi. Örneğin:
sum = 0 for x in [1, 2, 3, 4]: sum = sum + x- ara, devam et ve pas
break,continuevepassdeyimleriyle döngüleri denetleyebilirsiniz.breakdeyimi, en yakın kapsayan döngüden (tüm döngü deyiminden geçsin) atlıyor.continuedeyimleri en yakın kapsayan döngüye (döngüye ilişkin üstbilgi satırına) atlar vepassdeyimi boş bir deyim yertutucusıdır.- dene
Bir deyim, yanlış sayıda bağımsız değişken ile çağrılırsa ya da somutlaması için belirli bir hata koşulu saptarsa, hata ortaya konacak. Yakalanmayan bir hata, komut dosyasının çalıştırılma işlemini durdurur.
trydeyimi bu tür hataları tuzağa düşürmek için kullanılır. Pythontrydeyimleri, kural dışı durumları işleyen ve kural dışı durumlar oluşursa ya da olmayan bir kesinleştirme kodu çalıştıran iki farklı tat sağlar.try,except,elsedeyimi, bir deneme üstbilgisi satırı ve ardından girintili deyimler öbeği ile başlar; daha sonra, yakalanacak kural dışı durumların ve sondaki isteğe bağlıelseyantümcesinin dışında bir ya da daha çok isteğe bağlı koşul.try,finallydeyimleri bir try üstbilgi satırı ve ardından girintili deyimler öbeği ile başlar; daha sonra, try öbeği çalışırken bir kural dışı durumun ortaya çıkıp çıkmadığı, her zaman çıkış sırasında çalıştırılan en sonunda yantümce olur.try,except,elseişlevleri örneği aşağıdaki gibidir:try: statements except name: statements except name, data: statements else statementsÖrneğin:
try: myfunction () except: import sys print 'uncailed exception', sys.exc_info() try: myfilereader () except EOFError: break else: process next line here
Bir try 'nin genel biçimi ve sonunda aşağıdakine benzer:
try statements finally statementsÖrneğin:
def divide(x, y): return x / y def tester(y): try: print divide(8, y) finally: print 'on the way out...'
- Deyimler varsayılan olarak sırayla çalışır. Deyimler olağan olarak, göründükleri satırın sonunda sona erir. Deyimler tek bir satıra sığabilecek kadar uzun olduğunda, sonraki satıra devam ettiğini belirtmek için önceki satırın sonuna bir ters eğik çizgi (\) de ekleyebilirsiniz.
- Blok ve deyim sınırları otomatik olarak algılanır. Kod blokları etrafında, kaşlı ayraç ya da başlangıç ya da bitiş sınırlayıcısı yoktur. Bunun yerine, Python dili, deyimleri içiçe yerleşimli bir öbeğin içinde gruplamak için, bir üstbilgi altındaki deyimlerin girintisini kullanır. Blok sınırları, satır girintisi tarafından algılanır. Aynı uzaklığı girintili tüm deyimler, blok daha az girintili bir satır tarafından sona erdirilinceye kadar aynı kod öbeğine ait olur.
- Bileşik deyimler = header; ':', girintili deyimler. Python dilindeki tüm bileşik deyimler aynı örüntüyi izler: bir üstbilgi satırı iki nokta üst üste ile sonlandırıldı ve ardından üstbilgi altında bir ya da daha fazla içiçe yerleştirilmiş deyim girintili olarak yerleştirildi. Girintili deyimler bir blok olarak adlandırılır.
- Boşluklar ve yorumlar genellikle yoksayılır. Deyimlerin ve ifadelerin içindeki boşluklar neredeyse her zaman yoksayılır (dizgi değişmezleri ve girintilendirme dışında), açıklamalar da.
Komut dosyalarını başka bir komut dosyası kullanarak çağırma
Başka bir Jython komut dosyasından bir Jython komut dosyasını çağırmak için execfile komutunu kullanın. Örneğin:
Aşağıdakileri içeren test1.py adlı bir komut dosyası oluşturun:
execfile('/temp/script/testFunctions.py')
print printName('Cathy', 'Smith')Aşağıdakileri içeren testFunctions.py adlı bir komut dosyası oluşturun:
def printName(first, last):
name = first + ' ' + last
return nameDaha sonra komut dosyası bağımsız değişkeni olarak aşağıdaki yolu iletin:
wsadmin -lang jython -f '/temp/script/test1.py'Yol ayırıcınız olarak eğik çizgi (/) kullanmanız gerekir. Ters eğik çizgi (\) işe yaramaz.
Paketleri kullanan Jython komut dosyaları çalıştırılıyor
Paketleri kullanan komut dosyaları çalıştırıyorsanız, paketleri kullanan Jython komut dosyaları için arama yolu olan wsadmin aracını sağlamanız gerekir.
wsadmin aracına bu bilgileri sağlamak için, aracı başlattığınızda aşağıdaki seçeneği ekleyin:
-Dwsadmin.script.libraries.packages=path1;path2;...Burada dir1 ve dir2 , Jython paketlerini içeren kitaplıklara ilişkin dizin arama yollarını temsil eder.