このサイトについて

PythonのコードをJavaScriptにコンバートするpy2js

PythonのコードをJavaScriptにコンバートするpy2js

 PythonのコードをJavaScriptにコンバートできるモジュールを発見したのでちょっと使ってみた。Pythonのバイトコードコンパイラが出力するASTツリーからJavaScriptを生成している。これまでも,簡単な文字列置換を使ってPythonのコードをJavaScriptにコンバートする試みはいつくかあった(CrackAJAXとか)けど,こちらの方が汎用性が高いし,将来性がある気がする。はまらなそう,という意味で。

こういう仕組みを使うと,Webブラウザ上で実行するような簡単なコードを含めて,ロジックをPythonだけで書けるようになりそう。JavsScriptは良い言語だと思うけど,ずっとPythonを使っている方が気分がいいし,言語の切り替えが少ない方が開発効率も高くなるはずだ。テンプレートエンジンやサーバ側で自動的に変換してくれようにすると素敵だ:-)。

簡単なサンプルを作ってみた。cgi-binというディレクトリを作って,py2js というファイルを設置して,以下のソースを実行権限つきでjstest.pyとして設置。その後,一つ上のディレクトリに移ってPythonのインタラクティブモードから「import CGIHTTPServer;  CGIHTTPServer.test()」としたあと,「http://127.0.0.1:8000/cgi-bin/jstest.py」をブラウザで開く。フォームにPythonのコードを打ち込んでPostすると,JavaScriptに変換して実行してくれる。

#!/usr/local/bin/python

import cgi
from py2js import compilefile

html_body = """
<html>
  <body>
  <script type="text/javascript">
<!--
  %s
-->
  </script>
  <form method="POST" action="/cgi-bin/jstest.py">
    <textarea name="jscode" cols="40" rows="10">%s</textarea><br />
    <input type="submit" />
  </form>
  </body>
</html>"""

form=cgi.FieldStorage()
f=open('./tmp.js', 'w')
f.write(form.getvalue('jscode', ''))
f.close()
compilefile('./tmp.js', './tmpout.js')
jscode=open('./tmpout.js').read()

print "Content-type: text/html;charset=utf-8\n"
print html_body % (jscode, form.getvalue('jscode', ''))

Pythonのプログラムでは,range()のような組み込み関数をよく使うわけだけど,現状のpy2jsではdictとintしか実装されていない。JavaScript側でPythonの組み込み関数が使えるようになると,この手のモジュールはずっと便利になる。mochikitがPythonのグローパル関数を実装していたはずなので,持ってきたりすると幸せになれると思う。

2010-08-27 04:47