wsadmin-Scripting mit Jython verwenden
Jython ist eine alternative Implementierung von Pythonund 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.
Weitere Informationen zu Jython V2.7 finden Sie unter Jython V2.7 behavior changes .
Wenn Jython Version 2.1 erforderlich ist, müssen Sie dieses Produkt explizit mit einer der folgenden Methoden konfigurieren:
- Jython Version 2.1 mit dem Befehl "wsadmin" angeben:
wsadmin -conntype soap -usejython21 true -f test.py - Jython Version 2.1 mit einer angepassten Eigenschaft in der Datei wsadmin.properties angeben:
com.ibm.ws.scripting.usejython21=trueDer Standardwert ist "false".
Basisfunktion
Die Funktion ist der Name einer integrierten Funktion oder eine Jython-Funktion. Die folgenden Funktionen geben beispielsweise "Hello, World!" zurück. als Ausgabe:
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.
MBean -Operation aufruft, und die Methode MBean eine Zeichenfolge zurückgibt, die einige landessprachliche Zeichen wie das französische Akzentzeichen enthält, 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. Um die Anzeige von landessprachlichen Zeichen zu vermeiden, verwenden Sie eine Variable für die MBean -Rückgabe (z. B. output = AdminControl.invoke(mbean)) und verwenden Sie dann die Druckausgabe. Verwenden Sie den Jython-Befehl "print", um die Zeichenfolgen, die die landessprachlichen Zeichen enthalten, ordnungsgemäß zu konvertieren.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.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.
- and
- as
- assert
- break
- Klasse
- continue
- def
- del
- elif
- else
- except
- exec
- finally
- nach
- from
- global
- if
- import
- in
- is
- lambda
- not
- oder
- pass
- raise
- return
- try
- while
- durch
- yield
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 - <, < =, >, =, ==, < >,! =, ist nicht
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. Verwenden Sie im Anschluss an den umgekehrten Schrägstrich keine Leerzeichen, insbesondere keinen Tabulator. 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
def. Folgende Anweisungen sind funktionsbezogen:def,returnDie Anweisung
deferstellt eine Funktionobjectund ordnet die Funktion einem Namen zu. Die Anweisungreturnsendet ein Ergebnisobjekt an den Aufrufenden. Dieser Schritt ist optional. Wenn er fehlt, endet die Funktion, sodass der Steuerungsfluss nach dem Funktionsteil fortgesetzt wird.globalDie Anweisung
globaldeklariert 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, ... ArgN)
statements
return value
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
ifwählt auszuführende Aktionen aus. Die Anweisungifkann andere Anweisungen, darunter auch weitereif-Anweisungen, enthalten. Auf die Anweisungifkönnen eine oder mehrere optionaleelif-Anweisungen folgen und mit einem optionalenelse-Block enden.Das allgemeine Format von if sieht wie folgt aus:
if test1 statements1 elif test2 statements2 else statements3Beispiel:
weather = 'sunny' if weather == 'sunny': print "Nice weather" elif weather == 'raining': print "Bad weather" else: print "Uncertain, don't plan anything"- while
Die Anweisung
whilebesteht aus einer Kopfzeile mit einem Testausdruck, einem Hauptteil mit eingerückten Anweisungen und optional einer Anweisungelse, die ausgeführt wird, wenn die Steuerung die Schleife verlässt und keine Anweisung break folgt. Die Anweisungwhilefü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ürwhile:while test1 statements1 else statements2Beispiel:
a = 0; b = 10 while a < b: print a a = a + 1- nach
Die Anweisung
forbeginnt 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 target in object: statements else: statementsDie 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,continueundpasssteuern. Die Anweisungbreakverlässt die nächste Programmschleife (und die gesamte Schleifenanweisung). Die Anweisungcontinuespringt zum Beginn der nächsten Programmschleife (zur Kopfzeile der Schleife) und die Anweisungpassist 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
trywird zum Abfangen solcher Fehler verwendet. In Python gibt es zwei Arten vontry-Anweisungen, eine für die Bearbeitung von Ausnahmen und eine, die unabhängig von auftretenden Ausnahmen Abschlusscode ausführt. Die Anweisungentry,exceptundelsebeginnen 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 optionaleelse-Klausel am Ende. Die Anweisungentryundfinallybeginnen 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: statements except name: statements except name, data: statements else statementsBeispiel:
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 statements finally statementsBeispiel:
def divide(x, y): return x / y def tester(y): try: print divide(8, y) finally: print 'on the way out...'
- 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:
execfile('c:/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:
wsadmin -lang jython -f 'c:/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.
Verwendung von Jython mit Microsoft-Windows-Verzeichnissen
Jython behandelt die folgende Liste von Zeichen oder Bedingungen als Sonderzeichen. Verwenden Sie die Zeichen möglichst nicht, wenn Sie Jython verwenden.
- \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.
| 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 |