Jython과 함께 wsadmin 스크립트 사용

Jython은 Python의 대체 구현이며, 완전히 Java™에서 작성됩니다.

wsadmin 도구는 Jython V2.7을 사용합니다. 다음 정보는 Jython 구문의 기본 요약입니다. 모든 샘플 코드에서 행 시작 시 => 표기는 명령 또는 함수 출력을 나타냅니다.

추가 Jython V2.7 특정 정보는 Jython V2.7 동작 변경의 내용을 참조하십시오.

Jython V2.1이 요구되는 경우 다음 메소드 중 하나를 사용하여 이를 명시적으로 구성해야 합니다.

참고: Jython 라이브러리 모듈은 WebSphere Application Server 버전 9.0의 Jython 2진과 함께 제공됩니다. 그러나 Jython 라이브러리 모듈과 관련된 문제점이 발생할 경우 어떠한 기술 지원도 제공하지 않습니다. Jython 기술 문제에 대해서는 Jython 프로젝트에 질문을 게시하십시오.

기본 함수

함수는 기본 제공 함수 또는 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 언어가 파일에 정의된 모든 이름을 포함하는 모듈 오브젝트를 작성합니다. 즉, 모듈은 네임 스페이스입니다.

문제점 방지 문제점 방지: WebSphere Application Server MBean 조작을 호출하는 wsadmin 스크립트에서 Jython 명령을 발행한 후 MBean 메소드가 프랑스어 액센트 문자와 같은 일부 NLS 변환 문자가 포함된 문자열을 리턴하는 경우 Jython은 이 문자열을 python Unicode 문자열로 자동 변환하며 변환된 문자열을 wsadmin에 리턴합니다. MBean 메소드를 호출하는 스크립트에 Jython 인쇄 출력 명령을 포함시키면 MBean 메소드가 python Unicode 값 대신 wsadmin에 리턴하는 문자열에 NLS 변환 문자가 포함됩니다. NLS 변환 문자가 표시되지 않도록 하려면 MBean 리턴에 대한 변수(예: output = AdminControl.invoke(mbean))를 사용한 후 인쇄 출력을 사용하십시오. Jython 인쇄 명령을 사용하여 NLS 변환 문자를 포함하는 문자열을 올바르게 변환하십시오. gotcha
문제점 방지 문제점 방지: WebSphere Application Server MBean 조작을 호출하는 wsadmin 스크립트에서 Jython 명령을 실행하고 MBean 메소드가 일부 NLS 변환 문자(예: 프랑스어 액센트 문자)를 포함하는 문자열을 리턴하는 경우, Jython은 해당 문자열을 python 유니코드 문자열로 자동 변환하며 변환된 문자열을 wsadmin에 리턴합니다. MBean 메소드를 호출하는 스크립트에 Jython 인쇄 출력 명령이 포함된 경우에는 python 유니코드 값 대신에 MBean 메소드가 wsadmin에 리턴하는 문자열에 NLS 변환 문자가 포함됩니다. NLS 변환 문자가 표시되지 않도록 방지하려면 MBean 리턴에 대한 변수를 사용(예: output = AdminControl.invoke(mbean))한 후에 print output을 사용하십시오. Jython print 명령을 사용하면 NLS 변환 문자가 포함된 문자열을 올바르게 변환할 수 있습니다. gotcha

변수

이름에 오브젝트를 지정하려면 지정의 대상이 등호(=)의 첫 번째 측에 있어야 하고 지정 중인 오브젝트는 다른 한 측에 있어야 합니다. 첫 번째 측에 있는 대상은 이름 또는 오브젝트 컴포넌트일 수 있고 다른 측에 있는 오브젝트는 오브젝트를 계산하는 임의의 표현식일 수 있습니다. 다음 규칙을 사용하여 이름에 오브젝트를 지정합니다.

  • 지정을 통해 오브젝트 참조가 작성됩니다.
  • 이름은 지정할 때 작성됩니다.
  • 참조하기 전에 이름을 지정해야 합니다.

변수 이름 규칙은 C 언어에 대한 규칙과 같습니다. 예를 들어, 변수 이름에는 밑줄 문자(_) 또는 문자와 임의의 수의 문자, 숫자 또는 밑줄이 있을 수 있습니다.

다음 예약어는 변수 이름에 사용할 수 없습니다.
  • assert
  • break
  • 클래스(class)
  • continue
  • def
  • del
  • elif
  • else
  • except
  • exec
  • finally
  • for
  • from
  • global
  • if
  • import
  • in
  • is
  • lambda
  • not
  • 또는
  • pass
  • print
  • raise
  • return
  • try
  • while

예를 들면, 다음과 같습니다.

a  = 5
print a
=> 5

b =  a
print b
=> 5

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

두 번째 예는 변수 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 또는 y

    y는 x가 false인 경우에만 평가됩니다. 예를 들어, 다음과 같습니다.

    print 0 or 1
    => 1
  • x 및 y

    y는 x가 true인 경우에만 평가됩니다. 예를 들어, 다음과 같습니다.

    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

    비교 연산자, ID 테스트. 예를 들어, 다음과 같습니다.

    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.

함수 및 범위

Jython은 def문을 사용하여 함수를 정의합니다. 명령문 관련 함수는 다음과 같습니다.
  • def, return

    def문은 함수 object를 작성하여 이름에 지정합니다. return문은 호출자에게 결과 오브젝트를 전송합니다. 이 명령문은 선택적이며 이 명령문이 없으면 함수가 종료되어 제어 플로우가 함수 본문에서 이탈됩니다.

  • global

    global문은 지정할 모듈 레벨의 변수를 선언합니다. 기본으로, 함수에 지정된 모든 이름은 해당 함수에 로컬로 적용되며 함수 실행 중에만 존재합니다. 주위의 모듈에 이름을 지정하려면 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는 배열이므로 색인 명령을 사용하여 인수 목록에서 항목을 추출하십시오. 예를 들어, test.py는 세 개의 인수 a, b 및 c를 사용합니다.

wsadmin -f test.py  a  b  c

test.py 컨텐츠:

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

기본 명령문

두 개의 순환 명령문(whilefor)이 있습니다. 조건문은 if입니다. 오류 핸들 문은 try입니다. 마지막으로 제어 플로우를 세부 조정하기 위한 여러 명령문(break, continuepass)이 있습니다.

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문은 테스트 표현식이 있는 헤더 행, 들여쓰기한 하나 이상의 명령문 본문 및 제어가 break문으로 이동하여 실행하지 않고 루프에서 나가는 경우에 실행되는 선택사항 else문으로 구성됩니다. while문은 헤더 행의 테스트가 계속 true 값을 평가하는 한 들여 쓰기된 명령문 블록을 반복 실행합니다. while의 예는 다음과 같습니다.

while test1
   	statements1
else
   	statements2

예를 들어, 다음과 같습니다.

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

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, continuepass문의 루프를 제어할 수 있습니다. break문은 주위의 가장 가까운 루프에서 점프합니다(전체 루프문을 지남). continue문은 가장 가까운 엔클로징 루프의 시작부로 점프하고(루프의 헤더 행까지) pass문은 비어 있는 명령문 플레이스홀더입니다.

try

이 명령문은 명령문이 올바르지 않은 수의 인수로 호출되거나 구현에 특정되는 일부 오류 조건을 발견하는 경우에 오류를 발생시킵니다. 발견되지 않은 오류로 인해 스크립트의 실행이 중지됩니다. try문은 그러한 오류를 찾아내는 데 사용됩니다. Python try문은 두 가지 유형으로 제공됩니다. 하나는 예외를 처리하고 다른 하나는 예외의 발생 여부에 상관없이 최종 코드를 실행합니다. try, except, else문은 뒤에 들여쓰기한 명령문 블록, 발견할 예외 이름을 지정하는 하나 이상의 선택사항 except절 및 끝에 선택사항 else절이 차례대로 나오는 try 헤더 행으로 시작됩니다. 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의 일반 형식은 다음과 같습니다.

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 언어는 헤더 아래에서 명령문 들여쓰기를 사용하여 중첩 블록의 명령문을 그룹화합니다. 블록 경계는 행 들여쓰기로 발견됩니다. 동일한 간격으로 들여 쓰기한 모든 명령문은 해당 블록이 덜 들여 쓰기한 행으로 끝날 때까지 같은 코드 블록에 속합니다.
  • 복합 명령문 = 헤더; ':', 들여쓴 명령문. Python 언어에서 모든 복합 명령문은 다음과 동일한 패턴을 따릅니다. 콜론으로 종료된 헤더 행 뒤에 헤더 아래에서 들여쓰기한 하나 이상의 중첩 명령문. 들여쓰기한 명령문을 블록이라고 합니다.
  • 공백 및 주석은 대개 무시됩니다. 명령문 및 표현식 내의 공백은 거의 항상 무시되고(문자열 상수 및 들여쓰기에서는 제외), 주석도 마찬가지입니다.

다른 스크립트를 사용하여 스크립트 호출

execfile 명령을 사용하여 다른 Jython 스크립트에서 Jython 스크립트를 호출합니다. 예를 들면, 다음과 같습니다.

다음을 포함하는 test1.py이라는 스크립트를 작성하십시오.

[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')

다음을 포함하는 testFunctions.py이라는 스크립트를 작성하십시오.

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

스크립트 인수를 사용하여 다음 경로를 전달하십시오.

[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'

경로 분리자는 슬래시(/)를 사용해야 합니다. 백슬래시(\)는 작동하지 않습니다.

패키지를 사용하는 Jython 스크립트 실행

패키지를 사용하는 스크립트를 실행하는 경우 wsadmin 도구에 패키지를 사용하는 Jython 스크립트에 대한 검색 경로를 제공해야 합니다.

이 정보를 wsadmin 도구에 제공하려면 도구를 시작할 때 다음 옵션을 포함시키십시오.

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

여기서, dir1dir2은 Jython 패키지를 포함하는 라이브러리의 디렉토리 검색 경로를 나타냅니다.

[Windows]

Microsoft Windows 디렉토리에서의 Jython 사용법

Jython은 다음 목록의 문자 또는 조건을 특수로 처리합니다. Jython을 사용할 때에는 가능하면 이러한 문자를 사용하지 마십시오.

  • \a
  • \b
  • \f
  • \n
  • \N
  • \r
  • \t
  • \u
  • \U
  • \v
  • \x
  • 뒤에 0 - 7 사이의 숫자 시퀀스가 오는 백슬래시

Jython에서 Microsoft Windows 파일 경로를 지정하는 경우 이러한 특수 조건에 유의해야 합니다. 이러한 문자열을 사용해야 하는 경우 하나의 백슬래시가 아닌 "두 개의 백슬래시"를 사용하거나 단일 백슬래시를 슬래시로 대체하여 이러한 특수 문자열의 Jython 해석을 보완할 수 있습니다. 다음 예제는 이러한 조정을 수행하는 방법을 보여줍니다.

표 1. Jython 파일 경로 스펙. Windows 파일 경로에서 디렉토리 구분 기호로 \\ 또는 /를 사용하십시오.
잘못된 경로 정정된 이중 백슬래시 경로 정정된 슬래시 경로
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
문제점 방지 문제점 방지: 일반적으로 Jython에서 디렉토리 경로를 지정하는 경우 가능하면 슬래시를 사용해 보십시오. 슬래시는 백슬래시 사용과 연관된 여러 문제점을 방지합니다. gotcha

주제 유형을 표시하는 아이콘 개념 주제



시간소인 아이콘 마지막 업데이트 날짜: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=cxml_jython
파일 이름:cxml_jython.html