2012-02-15 17 views
0

ファイルからJavaプログラムを実行するには以下のコードがあります。djangoからjavaを実行

import subprocess 
ccmd = ['javac', 'T.java'] 
process = subprocess.Popen(ccmd) 
process.wait() 
rcmd = ['java', 'T'] 
output = "" 
process = subprocess.Popen(rcmd, stdout=subprocess.PIPE) 
output = process.stdout.read() 
print output, 

しかし、Javaコードをオンラインで送信して、POSTメッセージとして利用できるようにします。 .javaファイルにコードを保存せずにコードを実行し、上記のコードを実行すると効果的な方法がありますか?

+0

より良い/効率的に作成できる場合は、上記のコードを参考にしてください。無限ループのケースをどうやって確認するのですか? – John

+0

ユーザーが提出したJavaコードの実行を許可することは非常に危険です。 – kba

+0

hm ..正確ではありません。私はこれで新しいです。私はideone.comのようなものを作成しようとしていますが、javaのみです。 – John

答えて

1

いいえ、Javaコンパイラはファイルを入力として取り込み、出力としてファイルを生成するだけなので、コードをドライブに保存せずに実行する方法はないと思います。

しかし、ファイルを一時ディレクトリに保存し、コンパイルして実行し、2つのファイル(投稿された.javaファイルとコンパイル済み.classファイル)を削除するだけで済みます。これらのファイルは実行中に削除することもできます。

ただし、ユーザーが送信した任意のJavaコードを実行することは非常に危険です。

+0

しかし、ideone.comのようなオンラインコンパイラは、これらの危険な状況をどのように処理しますか。 – John

+1

@John答えるのは簡単な質問ではありません。多くのことを考慮する必要があります。これは、それ自身の問題に値するものです。しかし、ほとんどの場合、アプリケーションごとにサンドボックスを作成し、一定量のメモリを消費させ、クラスの特定のサブセットのみを使用できるようにし、アプリケーションがユーザーアプリケーションを監視し、彼らが許可されているよりも長く振る舞ったり、長く動いたりする。 – kba

+0

ありがとう。私は別の質問を投稿します。 – John

関連する問題