このサイトについて

11月28日(木),プログラミングの勉強会を開催します。エクセルの操作やスクレイピングをきっかけに学ぶ自動化のひみつ。

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