Używanie skryptów wsadmin w języku Jython

Język Jython jest alternatywną implementacją języka Pythoni jest napisany w całości w języku Java™.

Narzędzie wsadmin używa języka Jython V2.1. Poniższe informacje stanowią podstawowe podsumowanie składni języka Jython. We wszystkich przykładowym kodzie notacja => na początku wiersza reprezentuje dane wyjściowe komendy lub funkcji.

Podstawowa funkcja

Funkcja jest nazwą wbudowanej funkcji lub funkcją Jython. Na przykład następujące funkcje zwracają łańcuch "Hello, World!" jako dane wyjściowe:

print "Hello, World!"
=>Hello, World!

import sys
sys.stdout.write("Hello World!\n")
=>Hello, World!

W tym przykładzie program print identyfikuje standardowy strumień wyjściowy. Wbudowanego modułu można użyć, uruchamiając instrukcje importu, takie jak poprzedni przykład. Import instrukcji uruchamia kod w module jako część importowanego obiektu i zwraca obiekt modułu. sys jest wbudowanym modułem języka Python . W języku Python moduły są obszarami nazw, które są miejscami, w których tworzone są nazwy. Nazwy, które znajdują się w modułach, są nazywane atrybutami. Moduły odpowiadają plikom, a język Python tworzy obiekt modułu, który będzie zawierał wszystkie nazwy zdefiniowane w pliku. Innymi słowy, moduły są obszarami nazw.

Unikaj problemów: Po wywołaniu komendy Jython w skrypcie wsadmin, który wywołuje operację komponentu MBean WebSphere Application Server , a metoda komponentu MBean zwraca łańcuch zawierający niektóre przetłumaczone znaki NLS, takie jak francuski znak akcentu, w języku Jython automatycznie przekształca łańcuch w łańcuch unicode w języku python i zwraca przekształcony łańcuch do narzędzia wsadmin. Jeśli w skrypcie wywołują komendę drukowania w języku Jython, która wywołuje metodę komponentu MBean, przetłumaczone znaki NLS zostaną dołączone do łańcucha, który zostanie zwrócony przez metodę komponentu MBean do programu wsadmin, a nie wartości unicode python. Aby uniknąć wyświetlania przetłumaczonych znaków NLS, należy użyć zmiennej dla powrotu komponentu MBean (na przykład output = AdminControl.invoke(mbean)), a następnie użyć wartości print output. Użyj komendy języka Jython print , aby przekształcić łańcuchy zawierające poprawnie przetłumaczone znaki NLS.

Zmienna

Aby przypisać obiekty do nazw, cel przypisania znajduje się po pierwszej stronie znaku równości (=), a obiekt, który jest przypisywany po drugiej stronie. Celem po pierwszej stronie może być nazwa lub komponent obiektu, a obiekt po drugiej stronie może być wyrażeniem arbitralnym, które oblicza obiekt. W przypadku przypisywania obiektów do nazw istnieją następujące reguły:

  • Przypisania tworzą odwołania do obiektów.
  • Nazwy są tworzone podczas ich przypisywania.
  • Przed odwołaniem się do niego należy przypisać nazwę.

Reguły nazw zmiennych są podobne do reguł języka C, na przykład nazwy zmiennych mogą mieć znak podkreślenia (_) lub literę plus dowolną liczbę liter, cyfr lub znaków podkreślenia.

Dla nazw zmiennych nie można używać następujących słów zastrzeżonych:
  • oraz
  • Asercja
  • podział
  • klasa
  • kontynuacja
  • def
  • del
  • elif
  • w przeciwnym razie
  • z wyjątkiem
  • exec
  • w końcu
  • dla
  • od
  • globalne
  • jeśli
  • import,
  • w
  • jest
  • lambda
  • nie
  • lub
  • Przekaz
  • drukowanie
  • podnieś
  • powrót
  • spróbuj
  • while

Na przykład:

a  = 5
print a
=> 5

b =  a
print b
=> 5

text1, text2, text3, text4  = 'good', 'bad', 'pretty', 'ugly'
print text3
=> pretty

Drugi przykład przypisuje wartość zmiennej a do zmiennej b.

Typy i operatory

Poniższa lista zawiera przykłady wbudowanych typów obiektów:

  • Liczby. Na przykład:
    8, 3.133,  999L,  3+4j
    
    num1 = int(10)
    print num1
    => 10
  • Łańcuchy. Na przykład:
    'name',  "name's", ''
    
    print str(12345)
    => '12345'
  • Listy. Na przykład:
    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

Na poniższej liście znajdują się przykłady operatorów:

  • x lub y

    y jest wartościowane tylko wtedy, gdy x ma wartość false. Na przykład:

    print 0 or 1
    => 1
  • x i y

    y jest wartościowane tylko wtedy, gdy wartość x jest prawdziwa. Na przykład:

    print 0 and 1
    =>  0
  • x + y, x-y

    Dodawanie i konkatenacja, odejmowanie. Na przykład:

    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

    Mnożenie i powtarzanie, dzielenie, reszta i format. Na przykład:

    print 5 * 6
    => 30
    
    print 'test' * 3
    => test test test
    
    print 30 / 6
    => 5
    
    print 32 % 6
    => 2
  • x [ i], x [ i:j], x (...)

    Indeksowanie, wycinanie, wywołania funkcji. Na przykład:

    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
    
  • <, < =, >, > =, ==, < >,! =, nie jest

    Operatory porównania, testy tożsamości. Na przykład:

    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)

Podstawienie ukośnika odwrot

Jeśli instrukcja musi obejmować wiele linii, można również dodać ukośnik odwrotny (\) na końcu poprzedniego wiersza, aby wskazać, że kontynuujesz następny wiersz. W przypadku znaku ukośnika odwrotnego nie należy używać spacji, a w szczególności znaków tabulacji lub spacji. Na przykład:

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.

Funkcje i zakres

W języku Jython użyto instrukcji def w celu zdefiniowania funkcji. Instrukcje dotyczące funkcji obejmują:
  • def, return

    Instrukcja def tworzy funkcję object i przypisuje ją do nazwy. Instrukcja return wysyła obiekt wynikowy z powrotem do programu wywołującego. Jest to opcjonalne, a jeśli nie jest obecne, funkcja kończy działanie tak, aby przepływ sterowania spadł z ciała funkcji.

  • global

    Instrukcja global deklaruje zmienne na poziomie modułu, które mają być przypisane. Domyślnie wszystkie nazwy przypisane do funkcji są lokalne dla tej funkcji i istnieją tylko w czasie wykonywania funkcji. Aby przypisać nazwę w module obejmującym, należy wyświetlić listę funkcji w instrukcji globalnej.

Podstawowa składnia definiowania funkcji jest następująca:

def name (arg1, arg2, ... ArgN)
   statements
   return value

gdzie nazwa jest nazwą definiowanej funkcji. Po nim następuje nawias otwierający, nawias zamykający i dwukropek. Argumenty wewnątrz nawiasów zawierają listę parametrów do procedur. Następny wiersz po dwukropku jest organem funkcji. Grupa komend, które tworzą treść funkcji. Po zdefiniowaniu funkcji Jython jest ona używana tak samo jak dowolna z wbudowanych funkcji. Na przykład:

def intersect(seq1, seq2):
   res = []
   try:
      for x in seq1:
         if x in seq2:
            res.append(x)
   except:
      pass
   return res

Aby wywołać tę funkcję, należy użyć następującej komendy:

s1 = "SPAM"
s2 = "SCAM"
intersect(s1, s2)
=> [S, A, M]

intersect([1,2,3], (1.4)) 
=> [1]

Komentarze

Komentuj w języku Jython z literą funta (#).

Argumenty wiersza komend

W powłoce Jython argumenty wiersza komend są przekazywane do skryptu jako wartość parametru sys.argv. W programie wsadmin w języku Jython nazwa programu lub skryptu nie jest częścią pliku sys.argv. W przeciwieństwie do narzędzia wsadmin w języku Jython, autonomiczny plik języka Jython pobiera plik skryptowy jako argument początkowy skryptu. Ponieważ sys.argv jest tablicą, należy użyć komendy index w celu wyodrębnienia pozycji z listy argumentów. Na przykład test.py przyjmuje trzy argumenty a, b i c.

wsadmin -f test.py  a  b  c

Treść produktu test.py :

import sys
first  =  sys.argv[0]
second = sys.argv[1]
third = sys.argv[2]
arglen = len(sys.argv)

Podstawowe instrukcje

Istnieją dwie instrukcje w pętli: while i for. Instrukcja warunkowa to if. Instrukcja obsługi błędów to try. Na koniec, istnieją pewne instrukcje umożliwiające precyzyjne sterowanie przepływem sterowania: break, continuei pass.

jeśli

Instrukcja if wybiera działania do wykonania. Instrukcja if może zawierać inne instrukcje, w tym inne instrukcje if . Po instrukcji if może występować jedna lub większa liczba opcjonalnych instrukcji elif , a kończy się opcjonalnym blokiem else .

Ogólny format elementu, który wygląda następująco:

if test1
   statements1
elif test2
   statements2
else
   statements3

Na przykład:

weather = 'sunny'
if weather == 'sunny':
   print "Nice weather"
elif weather == 'raining':
   print "Bad weather"
else:
   print "Uncertain, don't plan anything"
while

Instrukcja while składa się z wiersza nagłówka z wyrażeniem testu, treścią jednego lub większej liczby instrukcji i opcjonalną instrukcją else , która jest uruchamiana, jeśli sterowanie kończy działanie pętli bez wykonywania instrukcji break. Instrukcja while wielokrotnie uruchamia blok instrukcji wcięć, o ile test w wierszu nagłówka zachowuje wartościowanie prawdziwej wartości. Poniżej przedstawiono przykład pliku while :

while test1
   statements1
else
   statements2

Na przykład:

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

Instrukcja for rozpoczyna się od wiersza nagłówka, który określa cel przypisania lub cele, wraz z obiektem, który ma zostać krok po kroku. Po nagłówku następuje blok instrukcji wciętych, które mają zostać powtórzone.

Poniżej przedstawiono przykład instrukcji for :

for target in object:
   statements
else:
   statements

Przypisuje elementy w obiekcie sekwencji do celu, jeden po jednym, a następnie uruchamia dla każdej z nich treść pętli. Treść pętli zwykle używa celu przypisania w celu odniesienia się do bieżącego elementu w sekwencji, tak jakby był on krokowym kursorem przez sekwencję. Na przykład:

sum = 0
for x in [1, 2, 3, 4]:
   sum = sum + x
break, continue, and pass

Pętle można sterować za pomocą instrukcji break, continue i pass . Instrukcja break wyskakuje z najbliższego pętli enzamykających (obok całej instrukcji pętli). Instrukcje continue skakują do początku najbliższej pętli enzamykających (do wiersza nagłówka pętli), a instrukcja pass jest pustym obiektem zastępczym instrukcji.

spróbuj

Instrukcja podniesie błąd, jeśli zostanie wywołana z błędną liczbą argumentów, lub jeśli wykryje jakiś warunek błędu, który jest określony w jego implementacji. Nieprzechwycony błąd przerywa działanie skryptu. Instrukcja try jest używana do pułapowania takich błędów. Instrukcje Python try znajdują się w dwóch smakach, które obsługują wyjątki i jeden z nich uruchamia kod finalizacji, niezależnie od tego, czy występują wyjątki. Instrukcja try, except, else rozpoczyna się od wiersza nagłówka, po którym następuje blok instrukcji z wcięciem, a następnie jeden lub więcej opcjonalnych instrukcji z wyjątkiem klauzul, które mają zostać przechwycony, oraz opcjonalnej klauzuli else na końcu. Instrukcje try, finally są uruchamiane z wierszem nagłówka try, po którym następuje blok instrukcji wcięć, a następnie klauzula finally, która zawsze działa w drodze wyjścia z wyjątku, niezależnie od tego, czy wystąpił wyjątek podczas działania bloku try.

An example of try, except, else functions follows:

try:
   statements
except name:
   statements
except name, data:
   statements
else
   statements

Na przykład:

try: myfunction () except: import sys print 'uncaught exception', sys.exc_info() try: myfilereader () except EOFError: break else: process next line here

Ogólny format try i wreszcie wygląda następująco:

try
   statements
finally
   statements

Na przykład:

def divide(x, y):
   return x / y

def tester(y):
   try:
      print divide(8, y)
   finally:
      print 'on the way out...'
Poniżej znajduje się lista reguł składni w języku Python:
  • Instrukcje są uruchamiane sekwencyjnie domyślnie. Instrukcje zwykle kończą się na końcu wiersza, na którym się pojawiają. Jeśli instrukcje są zbyt długie, aby zmieścić się w jednym wierszu, można również dodać ukośnik odwrotny (\) znajdujący się na końcu poprzedniego wiersza, aby wskazać, że kontynuujesz następny wiersz.
  • Granice bloku i instrukcji są wykrywane automatycznie. W blokach kodu nie ma nawiasów klamrowych ani separatorów końcowych ani końcowych. Zamiast tego język Python używa wcięć instrukcji pod nagłówkiem w celu zgrupowania instrukcji w zagnieżdżonym bloku. Granice bloku są wykrywane przez wcięcie linii. Wszystkie instrukcje z wcięciem w tej samej odległości należą do tego samego bloku kodu, dopóki ten blok nie zostanie zakończony przez linię mniej wciętą.
  • Instrukcje złożone = nagłówek; ':', wcięte instrukcje. Wszystkie instrukcje złożone w języku Python są zgodne z tym samym wzorcem: wiersz nagłówka zakończony dwukropkiem, po którym następuje jedno lub więcej zagnieżdżonych instrukcji w nagłówku. Wcięte instrukcje są nazywane blokiem.
  • Spacje i komentarze są zwykle ignorowane. Spacje wewnątrz instrukcji i wyrażeń są niemal zawsze ignorowane (z wyjątkiem stałych łańcuchowych i wcięć), dlatego komentarze są ignorowane.

Wywoływanie skryptów przy użyciu innego skryptu

Użyj komendy execfile , aby wywołać skrypt Jython z innego skryptu Jython. Na przykład:

Utwórz skrypt o nazwie test1.py , który zawiera następujące elementy:

[z/OS]
execfile('/temp/script/testFunctions.py')
print printName('Cathy', 'Smith')

Utwórz skrypt o nazwie testFunctions.py , który zawiera następujące elementy:

def printName(first, last):
   name = first + ' ' + last
   return name

Następnie należy przekazać następującą ścieżkę jako argument skryptu:

[z/OS]
wsadmin -lang jython -f '/temp/script/test1.py'

Jako separatora ścieżki należy użyć ukośników (/). Ukośniki odwrotne (\) nie działają.

Uruchamianie skryptów Jython, które korzystają z pakietów

W przypadku uruchamiania skryptów, które korzystają z pakietów, należy udostępnić narzędzie wsadmin ze ścieżką wyszukiwania dla skryptów Jython, które używają pakietów.

Aby udostępnić te informacje do narzędzia wsadmin, należy użyć następującej opcji podczas uruchamiania narzędzia:

-Dwsadmin.script.libraries.packages=path1;path2;...

gdzie dir1 i dir2 reprezentują ścieżki wyszukiwania katalogów dla bibliotek zawierających pakiety Jython.