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.

Sorunu önle: Bir WebSphere Application Server MBean işlemini çağıran bir wsadmin komut dosyasında bir Jython komutu verdiğinizde ve MBean yöntemi, Fransızca aksan karakteri gibi bazı NLS çevrilen karakterleri içeren bir dizgi döndürürken, Jython dizeyi otomatik olarak bir python Unicode dizgisine dönüştürür ve dönüştürülen dizgiyi wsadmin olarak döndürür. MBean yöntemini çağıran komut dosyasına Jython yazdırma çıkışı komutunu eklerseniz, NLS çevrilen karakterleri, MBean yönteminin python Unicode değerleri yerine wsadmin ' e geri döndüreceği dizgide yer alır. NLS çevrilen karakterlerinin görüntülenmesini önlemek için, MBean dönüş için bir değişken kullanın (örneğin, 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.

Aşağıdaki ayrılmış sözcükler değişken adları için kullanılamaz:
  • 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

Jython, işlevleri tanımlamak için def deyimini kullanır. İşlevlerle ilgili deyimler şunlardır:
  • def, return

    def deyimi, bir object işlevi yaratır ve bunu bir ada atar. return deyimi, ç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.

  • global

    global deyimi, 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 value

Burada 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 res

Bu 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  c

test.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

if deyimi gerçekleştirilecek işlemleri seçer. if deyimi, diğer if deyimleri de içinde olmak üzere diğer deyimleri içerebilir. if deyimi, isteğe bağlı bir ya da daha çok elif deyimi tarafından izlenebilir ve isteğe bağlı bir else bloku 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

while deyimi, 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ı bir else deyimi ile oluşur. while deyimi, ü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ğıdaki while için bir örnek verilmiştir:

while test1
   statements1
else
   statements2

Örneğin:

a = 0; b = 10
while a < b:
   print a
   a = a + 1
-

for deyimi, 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 for deyimi örneği verilmiştir:

for target in object:
   statements
else:
   statements

Sı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, continue ve pass deyimleriyle döngüleri denetleyebilirsiniz. break deyimi, en yakın kapsayan döngüden (tüm döngü deyiminden geçsin) atlıyor. continue deyimleri en yakın kapsayan döngüye (döngüye ilişkin üstbilgi satırına) atlar ve pass deyimi 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. try deyimi bu tür hataları tuzağa düşürmek için kullanılır. Python try deyimleri, 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, else deyimi, 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ı else yantümcesinin dışında bir ya da daha çok isteğe bağlı koşul. try, finally deyimleri 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, else iş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...'
Aşağıda, Python' da sözdizimi kurallarının listesi yer alıyor:
  • 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:

[z/OS]
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 name

Daha sonra komut dosyası bağımsız değişkeni olarak aşağıdaki yolu iletin:

[z/OS]
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.