Jython での wsadmin スクリプトの使用
Jython は、 Pythonの代替実装であり、完全に Java™で記述されています。
=> 表記は、コマンドまたは関数出力を表しています。基本関数
関数は、組み込み関数の名前か Jython 関数のいずれかです。 例えば、以下の関数は「Hello, World!」を返します。 次のように出力します。
print "Hello, World!"
=>Hello, World!
import sys
sys.stdout.write("Hello World!\n")
=>Hello, World!例では、print は標準出力ストリームを示しています。 上記の例のように、
import ステートメントを実行することによって組み込みモジュールを使用することができます。 import ステートメントは、モジュール内のコードをインポートの一部として実行し、
モジュール・オブジェクトを戻します。 sys は、Python 言語の組み込みモジュールです。 Python 言語では、モジュールは名前空間であり、
そこでは名前が作成されます。 モジュール内に常駐する名前は属性と呼ばれます。 モジュールはファイルに対応しており、
Python 言語はモジュール・オブジェクトを作成して、
ファイル内に定義されたすべての名前を格納します。 すなわち、モジュールは名前空間です。
output =
AdminControl.invoke(mbean)) を使用して、print output を使用します。 Jython print コマンドにより、NLS 翻訳済み文字を含むストリングを正しく変換します。変数
オブジェクトを名前に割り当てるには、割り当てのターゲットを等号 (=) の左側に置き、割り当てるオブジェクトを右側に置きます。 左側のターゲットは名前またはオブジェクト・コンポーネントとなり、 右側のオブジェクトはオブジェクトを計算する任意の式となります。 オブジェクトを名前に割り当てる際には、以下の規則が存在します。
- 割り当てによって、オブジェクト参照が作成されます。
- 名前は、割り当てる際に作成されます。
- 名前は、参照する前に割り当てる必要があります。
変数名規則は、C 言語の規則に似ています。 例えば、変数名は、1 つの下線文字 (_) または文字に加えて、任意の数の文字、 数字、または下線を含むことができます。
- および
- assert
- break
- クラス
- continue
- def
- del
- elif
- それ以外の場合
- except
- exec
- finally
- の場合
- from
- global
- の場合
- import
- in
- 次と同一である
- lambda
- not
- または
- pass
- 印刷
- raise
- 返す
- 試行
- while
例:
a = 5
print a
=> 5
b = a
print b
=> 5
text1, text2, text3, text4 = 'good', 'bad', 'pretty', 'ugly'
print text3
=> pretty2 番目の例では、変数 a の値を変数 b に割り当てています。
タイプと演算子
以下のリストには、組み込みオブジェクト・タイプの例が含まれています。
- 数字。 例:
8, 3.133, 999L, 3+4j num1 = int(10) print num1 => 10 - ストリング。 例:
'name', "name's", '' print str(12345) => '12345' - リスト。 例:
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
以下のリストには、演算子の例が含まれています。
- x or y
y は、x が偽である場合にのみ評価されます。 例:
print 0 or 1 => 1 - x and y
y は、x が真である場合にのみ評価されます。 例:
print 0 and 1 => 0 - x + y , x - y
加算と連結、減算。 例:
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
乗算と反復、除算、剰余とフォーマット。 例:
print 5 * 6 => 30 print 'test' * 3 => test test test print 30 / 6 => 5 print 32 % 6 => 2 - x[i], x[i:j], x(...)
指標付け、スライス、関数呼び出し。 例:
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
比較演算子、識別テスト。 例:
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)
円記号置換
ステートメントが複数行にまたがる必要がある場合は、前の行の末尾に円記号 (¥) を追加して、次の行に継続することを示すこともできます。 円記号の後ろには、空白文字、具体的にはタブやスペースを使用しないでください。 例:
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.関数と有効範囲
def ステートメントを使用して関数を定義します。 関数に関連するステートメントには、以下のものが含まれます。def,returndefステートメントは、 関数objectを作成してそれを名前に割り当てます。returnステートメントは、結果オブジェクトを呼び出し元に戻します。 これはオプションであり、これがない場合は関数が終了するため、 制御フローは関数本体で途切れます。globalglobalステートメントは、 割り当てるモジュール・レベルの変数を宣言します。 デフォルトでは、関数内に割り当てられた名前はすべて、 その関数に対してローカルであり、その関数が実行している間のみ存在します。 名前を囲みのモジュール内に割り当てるには、 関数を global ステートメントの中にリストします。
関数を定義する基本構文は、以下のとおりです。
def name (arg1, arg2, ... ArgN)
statements
return valueここで、name は、定義される関数の名前です。 その後に、開き括弧、閉じ括弧、およびコロンが続きます。 括弧内の引数には、プロシージャーに対するパラメーターのリストなどがあります。 コロンの次の行は、関数の本体です。 コマンドのグループが関数の本体を形成しています。 Jython 関数は、いったん定義された後は、他の組み込み関数と 同じように使用されます。 例:
def intersect(seq1, seq2):
res = []
try:
for x in seq1:
if x in seq2:
res.append(x)
except:
pass
return resこの関数を呼び出すには、以下のコマンドを使用します。
s1 = "SPAM"
s2 = "SCAM"
intersect(s1, s2)
=> [S, A, M]
intersect([1,2,3], (1.4))
=> [1] コメント
Jython 言語でコメントを作成する場合は、ポンド記号 (#) を使用します。
コマンド行引数
Jython シェルは、 コマンド行引数を sys.argv の値としてスクリプトに渡します。 wsadmin Jython では、プログラムまたはスクリプトの名前は sys.argv の一部ではありません。 wsadmin Jython とは異なり、Jython はスタンドアロン では、スクリプト・ファイルをスクリプトの最初の引数として使用します。 sys.argv は配列であるため、index コマンドを使用して引数リストから項目を抽出します。 例えば、test.py は 3 つの引数 a、b、および c を受け取ります。
wsadmin -f test.py a b ctest.py内容:
import sys
first = sys.argv[0]
second = sys.argv[1]
third = sys.argv[2]
arglen = len(sys.argv)基本ステートメント
ループ・ステートメントには、while と for の 2 つがあります。 条件ステートメントは if です。 エラー処理ステートメントは try です。 最後に、制御フローを微調整するステートメントには、
break、continue、および pass があります。
- の場合
ifステートメントは、実行するアクションを選択します。ifステートメントは、 他のifステートメントを含め、その他のステートメントを含むことができます。ifステートメントの後に、1 つ以上のオプションのelifステートメントを続け、オプションのelseブロックで終了することができます。if ステートメントの一般的な書式は、以下のようになります。
if test1 statements1 elif test2 statements2 else statements3例:
weather = 'sunny' if weather == 'sunny': print "Nice weather" elif weather == 'raining': print "Bad weather" else: print "Uncertain, don't plan anything"- while
whileステートメントは、テスト式の付いたヘッダー行、 1 つ以上のインデントされたステートメントの本体、 およびオプションのelseステートメントで構成されています。else ステートメントは、 制御が break ステートメントを検出することなくループを終了した場合に実行されます。whileステートメントは、 ヘッダー行でテストが真の値を評価し続けている限り、 インデントされたステートメントのブロックを繰り返し実行します。whileの例は、以下のとおりです。while test1 statements1 else statements2例:
a = 0; b = 10 while a < b: print a a = a + 1- の場合
forステートメントは、 割り当てターゲットを指定するヘッダー行、 およびステップスルーするオブジェクトと一緒に始まります。 ヘッダーの後ろには、反復したいインデントされたステートメントのブロックが続きます。forステートメント の例は以下のとおりです。for target in object: statements else: statementsこれは、シーケンス・オブジェクト内の項目を 1 つずつターゲットに割り当てて、 それぞれのループ本体を実行します。 ループ本体は通常、割り当てターゲットを使用して、 シーケンスをステップスルーしているカーソルのように、 シーケンス内の現在の項目を参照します。 例:
sum = 0 for x in [1, 2, 3, 4]: sum = sum + x- break、continue、および pass
ループを
break、continue、 およびpassステートメントで制御できます。breakステートメントは、最も近い囲みループを飛び越します (ループ・ステートメント全体を越えて)。continueステートメントは、最も近い囲みループの先頭 (ループのヘッダー行に) にジャンプし、passステートメントは空ステートメントのプレースホルダーです。- 試行
ステートメントは、間違った数の引数を指定して呼び出された場合、 あるいはその実装に特定のエラー状態を検出した場合、 エラーを起こします。 キャッチされていないエラーは、スクリプトの実行を停止します。
tryステートメントは、そのようなエラーをトラップするために使用されます。 Python のtryステートメントは、2 つの種類に分けられます。 一方は例外を処理し、他方は実行が行われるか否かに関係なく、 ファイナライズ・コードを実行します。try、except、elseの各ステートメントは、 try ヘッダー行で始まり、その後ろに、インデントされたステートメントのブロック、 キャッチする例外を指定する 1 つ以上のオプションの except 文節、 および最後にオプションのelse文節が続きます。try、finallyステートメントは、try ヘッダー行 で始まり、その後ろに、インデントされたステートメントのブロックがあり、次に、 その try ブロックの実行中に例外が発生したかどうかに関係なく終了前に必ず 実行される finally 文節が続きます。try、except、else関数の 例は以下のとおりです。try: statements except name: statements except name, data: statements else statements例:
try: myfunction() except: import sys print 'uncaught exception', sys.exc_info() try: myfilereader() except EOFError: break else: process next line here
try および finally ステートメントの一般的な書式は、以下のようになります。
try statements finally statements例:
def divide(x, y): return x / y def tester(y): try: print divide(8, y) finally: print 'on the way out...'
- ステートメントは、デフォルトでは順番に実行されます。 ステートメントは通常、それが指定されている行の末尾で終了します。 ステートメントが長過ぎて、1 行に収まらない場合、 前の行の末尾に円記号 (¥) を追加して、 次の行に継続することを示すこともできます。
- ブロックおよびステートメントの境界は自動的に検出されます。 コードのブロックの周辺には、 中括弧や、開始または終了の区切り文字はありません。 その代わりに、Python 言語では、 ネストされたブロック内のステートメントをグループ化するため、 ヘッダーの下でステートメントのインデントを使用します。 ブロック境界は、行インデントによって検出されます。 同じ距離だけインデントされたステートメントはすべて、 より少なくインデントされた行によってそのブロックが終了されるまで、 同じブロックのコードに所属します。
- 複合ステートメントのパターン = ヘッダー ':' インデントされたステートメント。 Python 言語では、複合ステートメントはすべて、同じパターンに従います。 すなわち、ヘッダー行がコロンで終了し、 その後に、ヘッダーの下でインデントされた 1 つ以上のネストされたステートメントが続きます。 インデントされたステートメントは、ブロックと呼ばれます。
- スペースおよびコメントは通常、無視されます。 ステートメントおよび式の中のスペースは、 ほとんどすべての場合無視されます (ストリング定数およびインデント内を 除く)。コメントも同様です。
別のスクリプトによるスクリプトの呼び出し
Jython スクリプトを別の Jython スクリプトから呼び出すには、 execfile コマンドを使用します。 例:
以下を含むスクリプトを作成し、test1.py という名前を付けます。
execfile('c:/temp/script/testFunctions.py')
print printName('Cathy', 'Smith')execfile('/temp/script/testFunctions.py')
print printName('Cathy', 'Smith')以下を含むスクリプトを作成し、testFunctions.py という名前を付けます。
def printName(first, last):
name = first + ' ' + last
return name次に、スクリプト引数として以下のパスを渡します。
wsadmin -lang jython -f 'c:/temp/script/test1.py'wsadmin -lang jython -f '/temp/script/test1.py'パス区切り文字にはスラッシュ (/) を使用する必要があります。 円記号 (¥) は 機能しません。
パッケージを使用する Jython スクリプトの実行
パッケージを使用するスクリプトを実行する場合は、パッケージを使用する Jython スクリプトの検索パスを wsadmin ツールに対して指定する必要があります。
この情報を wsadmin ツールに渡すには、wsadmin ツールの開始時に次のオプションを指定します。
-Dwsadmin.script.libraries.packages=path1;path2;...ここで、dir1 および dir2 は、 Jython パッケージが含まれているライブラリーのディレクトリー検索パスを表します。
Microsoft Windows ディレクトリーを指定する Jython の使用
Jython は、次のリストにある文字または条件を特殊なものとして扱います。 Jython を使用する際は、可能な限り、これらの文字を使用しないようにしてください。
- \a
- \b
- \f
- \n
- \N
- \r
- \t
- \u
- \U
- \v
- \x
- 円記号 (¥) の後に 0 から 7 の数字のシーケンスが続くもの
Jython で Microsoft Windows のファイル・パスを指定するときには、 これらの特別な条件によく注意してください。 これらの文字ストリングを使用しなければならない場合には、 Jython によるこれらの特殊文字ストリングの解釈を回避するために、 1 つの円記号 (¥) の代わりに 2 つの円記号 (¥) を使用するか、1 つの円記号 (¥) をスラッシュに置き換えてください。 以下に、こうした調整方法の例を示します。
| 誤りのパス | 二重の円記号 (¥) で修正したパス | スラッシュで修正したパス |
|---|---|---|
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 |