1
在学校的研究项目我需要从Web界面运行Java可执行文件。我使用Django是因为我对它有一些熟悉(但不是很多)。该网站将显示第一个Java程序输出的文件中的密钥列表。用户将选择两个键并点击“运行”。然后,Java可执行文件将采用网站中指定的那些文件并运行排序算法,并将结果输出到另一个文件(该文件需要呈现在网站上)。从Django在服务器上运行Java
我现在使用的方法是使用视图中的subprocess
调用来运行处理编译和运行java文件的shell脚本。 不过,当我通过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
和
import java.io.*;
public class HelloWord {
public static void main(String[] args) throws FileNotFoundException, UnsupportedEncodingException {
PrintWriter writer = new PrintWriter("output.txt", "UTF-8");
writer.println("O brave new world!");
writer.close();
}
}
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))
谢谢!