Jython 2.5.2 를 쓰는데, 명령창에서 jython 만 실행하고 나면, 환경변수 JAVA_HOME 이 바뀌어서 계속해서 자바 소스를 컴파일하거나 Groovy 를 사용하는데 문제를 일으킨다.

이럴 때는 경로 %JYTHON_HOME% 에 있는 jython.bat 파일의 5째 줄

set JAVA_HOME="C:\Program Files\Java\jre7"

set JAVA_HOME="내게 맞는 경로"    REM 예: "C:\Java7"

로 고친다.

--------------

위의 현상은 최신 버전인 Jython 2.5.3 에서도 마찬가지인데, Jython 인스톨러로 성치하는 과정에서 JAVA_HOME 을 바로 설정해주면 저런 현상(JAVA_HOME 이 바뀌는 문제)은 일어나지 않는다. 그러나 Java  SDK 를 다른 곳에 새로 설치하거나 하면, 또 jython.bat 파일을 위와 같이 손봐주어야 한다.

 


 

Posted by Scripter
,

* web.xml 파일에 추가될 내용

    <servlet>

        <servlet-name>PyServlet</servlet-name>

        <servlet-class>org.python.util.PyServlet</servlet-class>

        <init-param>

         <param-name>python/home</param-name>

         <param-value>/opt/usr/local/jython2.5.3</param-value>

        </init-param>

    </servlet>


    <servlet-mapping>

        <servlet-name>PyServlet</servlet-name>

        <url-pattern>*.py</url-pattern>

    </servlet-mapping>




* 수정 전 PyServlet: enter.py

import javax.servlet.http as http class enter(http.HttpServlet): def doPost(self, request, response): session = request.getSession(1) counter = session.getAttribute("counter") try: counter = int(counter) except: # counter is None counter = 0 counter += 1 session.setAttribute("counter", counter) response.contentType = "text/html; charset=utf-8" out = response.outputStream print >> out, """The string you entered is: %s. <br /> You have played this game %s times.\n<hr>""" % ( request.getParameter("thing"), counter) self.doGet(request, response) def doGet(self, request, response): response.contentType = "text/html; charset=utf-8" out = response.outputStream print >> out, """Enter a string: <form method="post"> <input type="text" name="thing"> <input type="submit"> </form>"""


* 수정 후 PyServlet: enter.py
# -*- encoding: utf-8 -*- import javax.servlet.http as http class enter(http.HttpServlet): def doPost(self, request, response): session = request.getSession(1) counter = session.getAttribute("counter") try: counter = int(counter) except: # counter is None counter = 0 counter += 1 session.setAttribute("counter", counter) request.setCharacterEncoding("utf-8") response.contentType = "text/html; charset=utf-8" out = response.outputStream print >> out, """The string you entered is: %s. <br /> You have played this game %s times.\n<hr>""" % ( request.getParameter("thing").encode("utf-8"), counter) self.doGet(request, response) def doGet(self, request, response): response.contentType = "text/html; charset=utf-8" out = response.outputStream print >> out, """Enter a string: <form method="post"> <input type="text" name="thing"> <input type="submit"> </form>"""



* Mac OS X Lion에서 Tomcat 7 & Jython 2.5.3을 사용하여 enter.py를 실행한 장면




Posted by Scripter
,

#!/usr/bin/python
# -*- encoding: latin-1 -*-  (성공)

# coding: iso-8859-1  (성공)

# -*- encoding: ascii -*-  (실패)
# -*- encoding: euc-kr -*-  (실패)

print("Hello")
print("안녕하세요?")
print(len("안녕하세요?"))


2011년 3월 11자로 배포된 Jython 2.5.2 에서 실행해 보았다.

실행> jython hello.py
Hello
안녕하세요?
11


그러나, 2011년 3월 12일에 배포된 IronPython 2.7 에서는 (아래 처럼) 한글이 출력되지 않는다. (한글이 아니라 라틴 문자가 출력된다.)



실행> ipy hello.py
Hello
¾E³cCI¼¼¿a?
11


IronPython 에서는 오히려 다음 소스 코드가  더 잘 실행된다.

#!/usr/bin/python
# coding: cp949  (성공)
# -*- encoding: euc-kr -*-  (성공)

# coding:ms949  (에러)

# coding: iso-8859-1  (실패)
# -*- encoding: latin-1 -*-  (실패)
# -*- encoding: ascii -*-  (실패)

print("Hello")
print("안녕하세요?")
print(len("안녕하세요?"))


실행> ipy hello.py
Hello
안녕하세요?
6

Posted by Scripter
,