サーバー(apache)で実行されているDjango Webアプリケーションがあり、これを使用してPythonコードからJavaファイルをコンパイルしようとしています:
def comp(request):
p = subprocess.Popen(['javac',filepath],stdout=subprocess.PIPE,stderr=subprocess.PIPE, bufsize=100)
res, err =p.communicate()
return HttpResponse (err)
comp メソッドを呼び出すと、BadStatusLine 例外が発生します。私はそれについてググったところ、出力を読み込もうとするとサブプロセスがブロックされている可能性があることがわかりました...だから私はこのコードを試しました:
def comp(request):
p = subprocess.Popen(['/usr/bin/javac',filepath],stdout=subprocess.PIPE,stderr=subprocess.PIPE, bufsize=100)
while p.returncode == None:
res, err =p.communicate()
if p.returncode != 0:
err = "whatever"
return HttpResponse (err)
それはまだブロックしている
最初のコードをPythonインタープリターに直接書き込もうとしましたが、うまくいきました。出力から結果が正常に取得されました。サブプロセスブロックはおそらくApacheと関係があると思います...正直なところ、何をすべきかわかりません次に、python doc http://docs.python.org/2/library/subprocess.htmlにある多くのメソッドに飽き飽きしました が、どれも機能しませんでした
ご協力ありがとうございました。