Index > Jythonことはじめ(MacOSXでjythonを使う方法)
Sun, September 10, 2006

Jythonことはじめ(MacOSXでjythonを使う方法)

MacOSXにはJavaVMがインストールされているので、 すぐにjythonを使える環境は整っているのだが、少し癖があるのでメモ。

Jythonの実行

Jythonは対話的に使うこともできますが、 ファイルにコードを書いておいて、それを実行させるのが普通だと思います。

foo.py というコードがあれば、

 $ ${HOME}/local/jython/jython foo.py

とします。

でも毎回フルパスでJythonを指定するのは面倒なのでパスを指定しておきます。 ${HOME}/.profileに以下の行を追加。

export PATH=$HOME/local/jython:$PATH

ターミナル,iTermで起動しなおせば、有効になります。
これで単に

 $ jython foo.py 

とすれば実行できるようになります。

追加のjarが必要な場合の実行方法

jythonコードを実行するときに、 追加のjarファイル(つまり外部ライブラリ)が必要な場合は、 jython foo.py とだけしてもうまくいかない。

たとえば、XMLの処理をする場合に、わたしは、 JDOM(jdom.jar)をよく使うので、これを例に説明すると...

CLASSPATHに jdom.jarを追加設定してから実行します。

export CLASSPATH=$CLASSPATH:${HOME}/mylib/jdom.jar
jython foo.py

makeから実行したい場合は、 Makefileを以下のように書く。 all: export CLASSPATH=$CLASSPATH:${HOME}/mylib/jdom.jar;jython foo.py

printが文字化けする

Jythonでは、文字列を出力するには、以下のようにします。

str="ほげほげ"
print str

しかしMacOSXのターミナルでは、たいていの場合、出力される文字は、文字化けしてしまう。 (文字化けしなかったら幸運です。)
これを回避するには、コードを書いたファイルの文字エンコードと、 JavaVMのデフォルトの文字エンコードとターミナルの表示エンコードが 全部一致する必要があります。

ここでは、すべてEUCJPで統一して文字化けをさける方法を説明します。

ターミナルのエンコード指定

MacOSX標準のTerminal.appを使っている場合は、 {quote} ターミナル > ウインドウ設定 > ディスプレイ > 文字セットエンコーディング {quote} で、指定します。

コードの書いてあるファイルの文字エンコードをEUCJPに

foo.py にコードが書いてあるとすると、

 $ nkf -e foo.py > tmp ; mv tmp foo.py

JavaVMの文字エンコード

たぶん、MacOSXのJavaVMのデフォルトのエンコードはShift_JISだと思いますが、 よくわからないので、デフォルトに頼らないで、 EUCJPに明示的に指定します。

import java.lang as lang
import java.io as io

str="ほげほげ"
print str

pw=io.PrintWriter( io.OutputStreamWriter(lang.System.out,"EUCJP") )
pw.println(str)
pw.close()

これで、文字化けを回避できました。(面倒ですね。)
これらストリーム処理をたくさん記述する場合は、 commons-ioを使うとよいでしょう。

 Twitter
follow me on Twitter
 Categories