wsadmin-Scripting mit Jython verwenden

Jython ist eine alternative Python-Implementierung und vollständig in Java™ geschrieben.

Das Tool wsadmin verwendet Jython Version 2.7. Nachfolgend sind die wichtigsten Informationen zur Jython-Syntax zusammengefasst. Im Beispielcode stellt das Zeichen => am Anfang einer Zeile einen Befehl oder eine Funktionsausgabe dar.

Spezielle Informationen zu Jython Version 2.7 finden Sie im Artikel Verhaltensänderungen in Jython Version 2.7

Wenn Jython Version 2.1 erforderlich ist, müssen Sie dieses Produkt explizit mit einer der folgenden Methoden konfigurieren:

Anmerkung: Die Jython-Bibliotheksmodule werden mit der Jython-Binärdatei in WebSphere Application Server Version 9.0 bereitgestellt. IBM stellt jedoch keine technische Unterstützung bereit, wenn Probleme mit Jython-Bibliotheksmodulen auftreten. Wenn technische Probleme mit Jython auftreten, reichen Sie Ihre Frage bei The Jython Project ein.

Basisfunktion

Die Funktion ist der Name einer integrierten Funktion oder eine Jython-Funktion. Beispiel: Die folgenden Funktionen geben die Ausgabe "Hello, World!" zurück:

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

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

In diesem Beispiel gibt print den Standardausgabedatenstrom an. Sie können das integrierte Modul verwenden, indem Sie wie im obigen Beispiel import-Anweisungen ausführen. Die Anweisung import führt im Rahmen des Importprozesses den Code in einem Modul aus und gibt das Modulobjekt zurück. Das Modul sys ist ein integriertes Modul der Sprache Python. Module sind in der Sprache Python Namespaces (Orte, an denen Namen erstellt werden). Namen, die in Modulen enthalten sind, werden als Attribute bezeichnet. Module entsprechen Dateien. Die Sprache Python erstellt ein Modulobjekt für alle in der Datei definierten Namen. Mit anderen Worten: Module sind Namespaces.

Fehler vermeiden Fehler vermeiden: Wenn Sie einen Jython-Befehl in einem wsadmin-Script absetzen, das eine Operation in einer MBean von WebSphere Application Server aufruft und die MBean-Methode eine Zeichenfolge zurückgibt, die landessprachliche Zeichen enthält, wie z. B. einen Akzent in Französisch, konvertiert Jython die Zeichenfolge automatisch in eine Python-Unicode-Zeichenfolge und gibt die konvertierte Zeichenfolge an wsadmin zurück. Wenn Sie den Jython-Befehl für Druckausgabe in das Script einfügen, das die MBean-Methode aufruft, werden anstelle der Python-Unicode-Werte die landessprachlichen Zeichen in die Zeichenfolge eingeschlossen, die die MBean-Methode an wsadmin zurückgibt. Wenn keine landessprachlichen Zeichen angezeigt werden sollen, verwenden Sie eine Variable für die Rückgabe der MBean (z. B. output = AdminControl.invoke(mbean)) und verwenden Sie anschließend den Befehl "print output". Verwenden Sie den Jython-Befehl "print", um die Zeichenfolgen, die die landessprachlichen Zeichen enthalten, ordnungsgemäß zu konvertieren.gotcha
Fehler vermeiden Fehler vermeiden: Wenn Sie einen Jython-Befehl in einem wsadmin-Script absetzen, das eine Operation in einer MBean von WebSphere Application Server aufruft und die MBean-Methode eine Zeichenfolge zurückgibt, die landessprachliche Zeichen enthält, wie z. B. einen Akzent in Französisch, konvertiert Jython die Zeichenfolge automatisch in eine Python-Unicode-Zeichenfolge und gibt die konvertierte Zeichenfolge an wsadmin zurück. Wenn Sie den Jython-Befehl für Druckausgabe in das Script einfügen, das die MBean-Methode aufruft, werden anstelle der Python-Unicode-Werte die landessprachlichen Zeichen in die Zeichenfolge eingeschlossen, die die MBean-Methode an wsadmin zurückgibt. Wenn keine landessprachlichen Zeichen angezeigt werden sollen, verwenden Sie eine Variable für die Rückgabe der MBean (z. B. output = AdminControl.invoke(mbean)), und verwenden Sie anschließend den Befehl print output. Verwenden Sie den Jython-Befehl print, um die Zeichenfolgen, die die landessprachlichen Zeichen enthalten, ordnungsgemäß zu konvertieren.gotcha

Variable

Bei der Zuordnung von Objekten zu Namen befindet sich das Zuordnungsziel auf der ersten Seite eines Gleichheitszeichens (=) und das zuzuordnende Objekt auf der anderen Seite. Das Ziel auf der ersten Seite kann ein Name oder eine Objektkomponente sein. Das Objekt auf der anderen Seite kann ein beliebiger Ausdruck zur Berechnung eines Objekts sein. Für die Zuordnung von Objekten zu Namen gelten die folgenden Regeln:

  • Zuordnungen erstellen Objektreferenzen.
  • Namen werden erstellt, wenn Sie sie zuordnen.
  • Sie müssen einen Namen zuordnen, bevor Sie ihn referenzieren.

Die Regeln für Variablennamen sind mit denen der Sprache C vergleichbar. So können beispielsweise Variablennamen ein Unterstreichungszeichen (_) haben, oder einen Buchstaben und eine beliebige Anzahl von Buchstaben, Ziffern oder Unterstreichungszeichen.

Die folgenden reservierten Wörter können nicht als Variablennamen verwendet werden:
  • und
  • assert
  • break
  • class
  • continue
  • def
  • del
  • elif
  • else
  • except
  • exec
  • finally
  • for
  • from
  • global
  • if
  • import
  • in
  • is
  • lambda
  • not
  • oder
  • pass
  • print
  • raise
  • return
  • try
  • while

Beispiel:

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

Im zweiten Beispiel wird der Wert von Variable a der Variablen b zugeordnet.

Typen und Operatoren

Nachfolgend sind einige Beispiele für integrierte Objekttypen aufgelistet:

  • Zahlen. Beispiel:
    8, 3.133,  999L,  3+4j
    
    num1 = int(10)
    print num1
    => 10
  • Zeichenfolgen. Beispiel:
    'name',  "name's", ''
    
    print str(12345)
    => '12345'
  • Listen. Beispiel:
    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

Die folgende Liste enthält Beispiele für die Operatoren:

  • x oder y

    y wird nur ausgewertet, wenn x gleich false ist. Beispiel:

    print 0 or 1
    => 1
  • x und y

    y wird nur ausgewertet, wenn x gleich true ist. Beispiel:

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

    Addition und Verknüpfung, Subtraktion. Beispiel:

    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

    Multiplikation und Wiederholung, Division, Rest und Format. Beispiel:

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

    Indexierung, Sektorenbildung, Funktionsaufrufe. Beispiel:

    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 is not

    Vergleichsoperatoren, Identitätstests. Beispiel:

    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)

Backslash-Substitution

Wenn eine Anweisung mehrere Zeilen umfasst, können Sie am Ende der jeweils vorherigen Zeile einen Backslash (\) hinzufügen, um anzugeben, dass die Anweisung in der nächsten Zeile fortgesetzt wird. Nach einem Backslash dürfen keine Leerzeichen stehen, d. h. keine Zeichen, die mit Tabulatortaste oder Leertaste eingegeben werden. Beispiel:

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.

Funktionen und Geltungsbereich

Jython definiert Funktionen mit der Anweisung def. Folgende Anweisungen sind funktionsbezogen:
  • def, return

    Die Anweisung def erstellt eine Funktion object und ordnet die Funktion einem Namen zu. Die Anweisung return sendet ein Ergebnisobjekt an den Aufrufenden. Dieser Schritt ist optional. Wenn er fehlt, endet die Funktion, sodass der Steuerungsfluss nach dem Funktionsteil fortgesetzt wird.

  • global

    Die Anweisung global deklariert Variablen, die zugeordnet werden sollen, auf Modulebene. Alle Namen, die in einer Funktion zugeordnet werden, sind standardmäßig für diese Funktion lokal und existieren nur, solange die Funktion ausgeführt wird. Wenn ein Name im übergeordneten Modul zugeordnet werden soll, müssen Funktionen in einer globalen Anweisung aufgelistet werden.

Basissyntax für das Definieren einer Funktion:

def name (arg1, arg2, ... ArgumentN)
   Anweisungen
   Rückgabewert

Hier steht name für den Namen der zu definierenden Funktion. Auf den Namen folgen eine linke runde Klammer, eine rechte runde Klammer und ein Doppelpunkt. Die in Klammern angegebenen Argumente enthalten eine Liste mit Parametern für die Prozeduren. Die Zeile nach dem Doppelpunkt ist der Hauptteil der Funktion. Der Funktionsteil besteht aus einer Gruppe von Befehlen. Eine von Ihnen definierte Jython-Funktion wird wie jede der integrierten Funktionen verwendet. Beispiel:

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

Verwenden Sie zum Aufrufen dieser Funktion den folgenden Befehl:

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

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

Kommentare

Kommentare beginnen in der Sprache Jython mit dem Nummernzeichen (#).

Befehlszeilenargumente

Die Jython-Shells übergeben die Befehlszeilenargumente als Wert von "sys.argv" an das Script. In der wsadmin-Jython ist der Name des Programms bzw. Scripts nicht Teil von sys.argv. Anders als wsadmin-Jython verwendet eigenständiges Jython die Scriptdatei als Anfangsargument für das Script. Da sys.argv eine Feldgruppe ist, verwenden Sie den Befehl "index", um Elemente aus der Argumentliste zu extrahieren. Beispiel: An test.py werden drei Argumente übergeben: a, b und c.

wsadmin -f test.py  a  b  c

Inhalt von test.py:

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

Basisanweisungen

Es gibt zwei Schleifenanweisungen: while und for. Die bedingte Anweisung ist if. Die Anweisung für die Fehlerbehandlung ist try. Schließlich gibt es noch einige Anweisungen für die Optimierung des Steuerungsflusses: break, continue und pass.

if

Die Anweisung if wählt auszuführende Aktionen aus. Die Anweisung if kann andere Anweisungen, darunter auch weitere if-Anweisungen, enthalten. Auf die Anweisung if können optional elif-Anweisungen folgen. Beendet werden kann die Anweisung mit einem optionalen else-Block.

Das allgemeine Format von if sieht wie folgt aus:

if test1
   anweisungen1
elif test2
   anweisungen2
else
   anweisungen3

Beispiel:

wetter = 'sonnig'
if wetter == 'sonnig':
   	print "schönes Wetter"
elif weather == 'regnerisch':
   	print "schlechtes Wetter"
else:
   	print "Unbeständige Witterung"
while

Die Anweisung while besteht aus einer Kopfzeile mit einem Testausdruck, einem Hauptteil mit eingerückten Anweisungen und optional einer Anweisung else, die ausgeführt wird, wenn die Steuerung die Schleife verlässt und keine Anweisung break folgt. Die Anweisung while führt so lange wiederholt einen Block eingerückter Anweisungen aus, wie ein Test in der Kopfzeile den Wert "true" ergibt. Es folgt ein Beispiel für while:

while test1
   	anweisungen1
else
   	anweisungen2

Beispiel:

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

Die Anweisung for beginnt mit einer Kopfzeile, die Zuordnungsziele und ein schrittweise durchzugehendes Objekt angibt. Auf die Kopfzeile folgt ein Block mit eingerückten Anweisungen, die wiederholt werden sollen.

Es folgt ein Beispiel für eine for-Anweisung:

for ziel in objekt:
   anweisungen
else:
   	anweisungen

Die Anweisung ordnet die Elemente im Sequenzobjekt nacheinander dem Ziel zu und führt für jedes dieser Elemente den Hauptteil mit der Schleife aus. Der Hauptteil mit der Schleife verweist in der Regel mit dem Zuordnungsziel auf das aktuelle Element in der Folge, als wäre er ein Cursor, der die Folge schrittweise durchläuft. Beispiel:

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

Schleifen können Sie mit den Anweisungen break, continue und pass steuern. Die Anweisung break verlässt die nächste Programmschleife (und die gesamte Schleifenanweisung). Die Anweisung continue springt zum Beginn der nächsten Programmschleife (zur Kopfzeile der Schleife) und die Anweisung pass ist eine leere Platzhalteranweisung.

try

Eine Anweisung löst einen Fehler aus, wenn sie mit einer falschen Anzahl von Argumenten aufgerufen wird oder eine für ihre Implementierung spezifische Fehlerbedingung feststellt. Bei einem nicht abgefangenen Fehler wird die Scriptausführung gestoppt. Die Anweisung try wird zum Abfangen solcher Fehler verwendet. In Python gibt es zwei Arten von try-Anweisungen, eine für die Bearbeitung von Ausnahmen und eine, die unabhängig von auftretenden Ausnahmen Abschlusscode ausführt. Die Anweisungen try, except und else beginnen mit einer try-Kopfzeile, auf die ein Block mit eingerückten Anweisungen folgt. An diesen Block können sich except-Klauseln anschließen, die abzufangende Ausnahmen benennen, sowie eine optionale else-Klausel am Ende. Die Anweisungen try und finally beginnen mit einer try-Kopfzeile, auf die ein Block mit eingerückten Anweisungen folgt. Am Ende steht die finally-Klausel, die unabhängig davon ausgeführt wird, ob während des try-Blocks eine Ausnahme eingetreten ist oder nicht.

Es folgt ein Beispiel für die Funktionen try, except, else:

try:
   anweisungen
except name:
   anweisungen
except name, daten:
   anweisungen
else
   	anweisungen

Beispiel:

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

Allgemeines Format von try und finally:

try
   anweisungen
finally
   	anweisungen

Beispiel:

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

def tester(y):
   try:
      	  		print divide(8, y)
   finally:
      			print 'on the way out...'
In Python gelten die folgenden Syntaxregeln:
  • Die Anweisungen werden standardmäßig nacheinander ausgeführt. Normalerweise enden Anweisungen am Ende der Zeile, in der sie sich befinden. Wenn eine Anweisung nicht in eine Zeile passt, kann am Ende der ersten Zeile ein Backslash (\) hinzugefügt werden, um anzugeben, dass die Anweisung in der nächsten Zeile fortgesetzt wird.
  • Block- und Anweisungsgrenzen werden automatisch erkannt. Codeblöcke sind nicht in geschweifte Klammern gesetzt oder mit einem Anfangs- bzw. Endbegrenzer versehen. Bei der Sprache Python sind die Anweisungen stattdessen unter einer Kopfzeile eingerückt und in einem verschachtelten Block gruppiert. Die Blockgrenzen werden anhand des Zeileneinzugs erkannt. Alle Anweisungen mit dem gleichen Einzug gehören zu einem Codeblock, der in einer Zeile mit geringerem Einzug endet.
  • Zusammengesetzte Anweisungen bestehen aus Kopfzeile, ':' und eingerückten Anweisungen. Alle zusammengesetzten Anweisungen in der Sprache Python folgen demselben Muster: Auf eine Kopfzeile, die mit einem Doppelpunkt endet, folgen verschachtelte Anweisungen, die unter der Kopfzeile eingerückt sind. Die eingerückten Anweisungen bilden einen Block.
  • Leerzeichen und Kommentare werden in der Regel ignoriert. Leerzeichen innerhalb von Anweisungen und Ausdrücken werden in den meisten Fällen ignoriert (außer bei Zeichenfolgekonstanten und Einrückungen). Das gleiche gilt für Kommentare.

Scripts mit einem anderen Script aufrufen

Verwenden Sie den Befehl execfile, um ein Jython-Script in einem anderen Jython-Script aufzurufen. Beispiel:

Erstellen Sie ein Script mit dem Namen test1.py und dem folgenden Inhalt:

[AIX Solaris HP-UX Linux Windows]
execfile('c:/temp/script/testFunctions.py')
print printName('Cathy', 'Smith')
[z/OS]
execfile('/temp/script/testFunctions.py')
print printName('Cathy', 'Smith')

Erstellen Sie ein Script mit dem Namen testFunctions.py und dem folgenden Inhalt:

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

Übergeben Sie anschließend den folgenden Pfad als Scriptargument:

[AIX Solaris HP-UX Linux Windows]
wsadmin -lang jython -f 'c:/temp/script/test1.py'
[z/OS]
wsadmin -lang jython -f '/temp/script/test1.py'

Sie müssen Schrägstriche (/) als Pfadtrennzeichen verwenden. Die Verwendung von Backslashes (\) ist nicht zulässig.

Jython-Scripts ausführen, die Pakete verwenden

Wenn Sie Scripts ausführen, die Pakete verwenden, müssen Sie im Tool "wsadmin" den Suchpfad für die Jython-Scripts angeben, die Pakete verwenden.

Geben Sie dazu beim Starten des Tools "wsadmin" die folgende Option an:

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

Verzeichnis1 und Verzeichnis2 sind die Verzeichnissuchpfade für Bibliotheken, die Jython-Pakete enthalten.

[Windows]

Verwendung von Jython mit Microsoft-Windows-Verzeichnissen

Jython behandelt die Zeichenfolgen in der folgenden Liste als Sonderzeichen bzw. Sonderbedingungen. Bei Verwendung von Jython sollten diese Zeichenfolgen daher möglichst nicht verwendet werden.

  • \a
  • \b
  • \f
  • \n
  • \N
  • \r
  • \t
  • \u
  • \U
  • \v
  • \x
  • ein Backslash (\), auf den eine Reihe von Zahlen zwischen 0 und 7 folgen

Wenn Sie Microsoft-Windows-Dateipfade in Jython angeben, müssen Sie diese Sonderbedingungen berücksichtigen. Müssen Sie eine dieser Zeichenfolgen verwenden, können Sie der Jython-Interpretation dieser Sonderzeichen entgegenwirken, indem Sie anstelle eines einzelnen Backslashes einen doppelten Backslash (\\) angeben oder den einzelnen Backslash durch einen Schrägstrich (/) ersetzen. Die folgenden Beispiele veranschaulichen die entsprechenden Anpassungen.

Tabelle 1. Angaben des Jython-Dateipfads. Verwenden Sie \\ oder / als Verzeichnistrennzeichen in Windows-Dateipfaden.
Falsche Pfadangabe Korrigierter Pfad mit doppelten Backslashes Korrigierter Pfad mit Schrägstrichen
c:\aadirectory\myfile.txt c:\\aadirectory\\myfile.txt c:/aadirectory/myfile.txt
c:\myfiles\number1.txt c:\\myfiles\\number1.txt c:/myfiles/number1.txt
c:\zebra7\stripe.txt c:\zebra7\\stripe.txt c:/zebra7/stripe.txt
c:\5mod\Net33\residue.log c:\\fivemod\\Net33\\residue.log c:/fivemod/Net33/residue.log
Fehler vermeiden Fehler vermeiden: Im Allgemeinen sollten Sie versuchen, bei der Angabe von Verzeichnispfaden in Jython möglichst den Schrägstrich zu verwenden. Mit dem Schrägstrich können viele der Probleme, die bei Verwendung des Backslashes auftreten, vermieden werden. gotcha

Symbol, das den Typ des Artikels anzeigt. Konzeptartikel



Symbol für Zeitmarke Letzte Aktualisierung: 25.05.2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=cxml_jython
Dateiname:cxml_jython.html