我有一个在服务器上运行的Django Web应用程序(apache),我正在尝试使用以下代码从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异常。我搜索了它,我发现在尝试reed输出时子进程可能会阻塞...所以我尝试了这段代码:
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但没有工作
感谢您的帮助。
答案 0 :(得分:0)
我已成功安装Celery并且我使用Redis作为消息队列,我能够运行任务并从我启动的任何子进程获取输出,除了javac,输出始终为空字符串 这是任务代码:
class JavaSubTask(Task):
def run(self, filepath, **kwargs):
p = subprocess.Popen(["/usr/bin/javac",filepath],stdout=subprocess.PIPE,stderr=subprocess.PIPE)
p.wait()
command_output, err = p.communicate()
return(command_output + err)
tasks.register(JavaSubTask)
我正在用
运行芹菜python manage.py celeryd worker -l INFO
我也尝试过pexpect模块,但是给出了相同的结果(还有commands.getstatusoutput) 我还尝试将输出重定向为2>& 1但也失败了
由于