从Django在服务器上运行Java
对于学校的一个研究项目,我需要从web界面运行java可执行文件。我使用Django是因为我对它有些熟悉(但不太熟悉)。该网站将显示第一个java程序输出的文件中的密钥列表。用户将选择其中两个键并点击“运行”。然后,Java可执行文件将从网站中获取指定的文件,并运行排序算法,然后将结果输出到另一个文件(需要在网站上呈现) 我现在使用的方法是使用视图中的从Django在服务器上运行Java,java,python,django,shell,Java,Python,Django,Shell,对于学校的一个研究项目,我需要从web界面运行java可执行文件。我使用Django是因为我对它有些熟悉(但不太熟悉)。该网站将显示第一个java程序输出的文件中的密钥列表。用户将选择其中两个键并点击“运行”。然后,Java可执行文件将从网站中获取指定的文件,并运行排序算法,然后将结果输出到另一个文件(需要在网站上呈现) 我现在使用的方法是使用视图中的子流程调用来运行shell脚本,该脚本处理java文件的编译和运行然而,当我通过Django运行shell文件时,我可以看到shell文件正在执行
子流程
调用来运行shell脚本,该脚本处理java文件的编译和运行然而,当我通过Django运行shell文件时,我可以看到shell文件正在执行,但Java代码从未运行过。如果我在本地运行shell文件,Java代码编译并运行良好
现在,即使有办法让它工作,它仍然是相当复杂的,似乎是一个安全风险。从顶级设计的角度来看,有没有更好的方法来实现这一点
代码:
#!/bin/bash
echo HelloFromServerShell
JAVAFILE="/home/hduser/Documents/HelloWord.java"
JAVAEXEC="/home/hduser/Documents/"
JAVACLASS="HelloWord"
javac $JAVAFILE
java -cp $JAVAEXEC $JAVACLASS
及
views.py:
def java_button(request):
subprocess.call(["/home/hduser/Documents/JavaRun.sh"], shell=True)
subprocess.call(["mkdir", "/home/hduser/Documents/test"], shell=False)
template = loader.get_template('file_chooser.html')
context = {
}
return HttpResponse(template.render(context,request))
谢谢 运行Django服务器的用户可能在其
路径中没有javac
和java
。您应该在脚本中指定这些可执行文件的完整路径,您可以通过运行which javac
和which java
找到这些路径。运行Django服务器的用户可能在其路径中没有javac
和java
。您应该在脚本中指定这些可执行文件的完整路径,您可以通过运行which javac
和which java
找到这些路径
def java_button(request):
subprocess.call(["/home/hduser/Documents/JavaRun.sh"], shell=True)
subprocess.call(["mkdir", "/home/hduser/Documents/test"], shell=False)
template = loader.get_template('file_chooser.html')
context = {
}
return HttpResponse(template.render(context,request))