和 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 语句来使用内置模块,如前面的示例。 该语句导入将模块中的代码作为导入的一部分运行,并返回模块对象。 sys 是 Python 语言的内置模块。 在 Python 语言中,模块是名称空间,它是创建名称的位置。 驻留在模块中的名称称为属性。 模块与文件相对应,且 Python 语言创建模块对象以包含文件中定义的所有名称。 换句话说,模块就是名称空间。
output =
AdminControl.invoke(mbean)),然后使用 print output。 使用 Jython print 命令来正确地转换包含 NLS 已翻译字符的字符串。变量
要对名称指定对象,指定目标位于等号 (=) 左侧,要指定的对象位于等号右侧。 左侧的目标可以是名称或对象组件,右侧的对象可以是用于计算对象的任意表达式。 以下是将对象赋值给名称的规则:
- 赋值创建对象引用。
- 对名称赋值时创建它们。
- 在引用名称之前必须指定该名称。
变量名称规则与 C 语言的规则相似;例如,变量名称可以具有下划线字符 (_) 或字母,再加上任意数目的字母、数字或下划线。
- 和
- 断言
- 中断
- 类
- 继续
- def
- 删除
- elif
- else
- 除外
- EXEC
- 最终
- 针对
- 从
- 全局
- if
- import
- 独一无二的
- 是
- lambda
- 非
- 或
- pass
- 打印
- 引发
- 返回
- 尝试
- while
例如:
a = 5
print a
=> 5
b = a
print b
=> 5
text1, text2, text3, text4 = 'good', 'bad', 'pretty', 'ugly'
print text3
=> pretty第二个示例将变量 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
仅当 x 为 false 时对 y 求值。 例如:
print 0 or 1 => 1 - x and y
仅当 x 为 true 时对 y 求值。 例如:
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 函数,就会像使用任何内置函数一样使用该 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 Shell 将命令行参数作为 sys.argv 的值传递给脚本。 在 wsadmin Jython 中,程序或脚本名称不是 sys.argv 中的部分。 与 wsadmin Jython 不同,独立的 Jython 将脚本文件作为脚本的初始自变量。 因此 sys.argv 是一个数组,使用索引命令抽取参数列表中的项。 例如,test.py 采用三个自变量 a、b 和 c。
wsadmin -f test.py a b ctest.py content:
import sys
first = sys.argv[0]
second = sys.argv[1]
third = sys.argv[2]
arglen = len(sys.argv)基本语句
有两个循环语句:while 和 for。 条件语句是 if。 错误处理语句是 try。 最后,有一些语句可以用来微调控制流:break、continue 和 pass。
- if
if语句选择要执行的操作。if语句可能包含其他语句,其中包括其他if语句。if语句可以后跟一个或多个可选的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语句由具有测试表达式的头行、一个或多个缩进语句组成的主体以及可选的else语句组成,该语句在控件退出循环而没有运行到中断语句时运行。 只要标题行中的测试保持求值为 true 值,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它将序列对象中的项依次赋值给目标,并为每一项运行循环体。 循环体通常使用赋值目标引用序列中的当前项,就好像光标经过此序列一样。 例如:
sum = 0 for x in [1, 2, 3, 4]: sum = sum + x- break、continue 和 pass
可以使用
break、continue和pass语句控制循环。break语句跳出最近的闭循环(经过整个循环语句)。continue语句跳转到最接近的闭合循环开头(跳转到该循环的标题行),而pass语句是空语句占位符。- 尝试
如果用错误数量的参数调用语句,或者如果语句检测到特定于其实现的某些错误条件时,它会产生错误。 未捕获的错误会导致停止运行脚本。
try语句用来捕获这样的错误。 Pythontry语句以两种形式出现,一种用于处理异常,另一种用于运行最终化代码(无论是否发生异常)。try、except和else语句以 try 头行开始,后跟一块缩进语句,然后是一个或多个可选异常子句(它们指定要获取的异常),末尾是可选的else子句。try和finally语句以 try 头行开始,后跟缩进的语句块,然后是始终在结束时运行的 finally 子句(无论在运行 try 块时是否发生了异常)。下面是
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...'
- 缺省情况下,语句按顺序运行。 语句通常在它们所在行的行末结束。 如果语句太长,无法在同一行中输入,那么您也可以在前一行的末尾添加反斜杠 (\),以表明要在下一行继续输入该语句。
- 会自动检测块和语句边界。 代码块周围没有花括号或起始/结束定界符。 Python 语言在头下使用缩进语句以对嵌套块中的语句进行分组。 通过行缩进检测块边界。 所有缩进相同距离的语句属于同一代码块,直到该代码块由缩进较少的一行结束为止。
- 复合语句 = 头;“:”、缩进语句。 Python 语言中的所有复合语句遵循同一模式:头行以冒号结束,后跟在头下缩进的一个或多个嵌套语句。 缩进语句称为块。
- 通常忽略空格和注释。 几乎总是忽略语句和表达式中的空格(除非在字符串常量和缩进中),注释也是如此。
使用一个脚本调用其他脚本
请使用 execfile 命令来从一个 Jython 脚本调用另一个 Jython 脚本。 例如:
创建包含以下内容的称为 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 脚本
如果您运行使用包的脚本,那么必须为 wsadmin 工具提供将使用包的 Jython 脚本的搜索路径。
要为 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 解释。 以下示例说明了如何进行这些调整。
| 错误路径 | 更正后的使用反斜杠的路径 | 更正后的使用正斜杠的路径 |
|---|---|---|
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 |