採点するのが結構大変かな〜と思って、AOJみたいな感じで問題作っておいて。
formからプログラムを送ると、コンパイルして実行までしてくれるシステムを作った。(もちろんUIはhoge)
さて、どうやって実装したか。
さすがに、プログラムが実行されるまでhttpのレスポンスが帰らないのはクソ実装すぎるので。
別のThreadを使って見ることにした。
Pythonで書いたのだが、モジュールがあったのですぐにかけた。
http://www.python.jp/doc/2.5/lib/module-threading.html
http://techno-st.net/2010/02/06/python-3.html
ここらへんを参考にすればいい。
次に、外部のプログラムの実行。
forkを考えたが、ちょっと調べてみると。
subprocessという標準ライブラリがあったのでそれを使ってみることにした。
import subprocess
subprocess.Popen(["echo", "hoge"]);
こんな感じで書けばecho hogeが実行される。これは、stdinやstdoutの設定もできるし、そのコマンドが終わるまでプログラムが終わったりしないので、かなり便利だった。
一定時間まって、プロセスが終わっているかとかを確認して終わってなかったらKILLしてTLEにしてしまえばOK
一応、ソースをgithubに上げておきました。
https://github.com/higumachan/oknct_judge
0 件のコメント:
コメントを投稿