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)をよく使うので、これを例に説明すると...
- jdom.jar を使用するjythonコードは、foo.py
- jdom.jar は、${HOME}/mylib/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を使うとよいでしょう。