【发布时间】:2023-04-01 03:13:01
【问题描述】:
对于学校的一个研究项目,我需要从 Web 界面运行 java 可执行文件。我使用 Django 是因为我对它有些熟悉(但并不多)。该网站将显示第一个 java 程序输出的文件中的密钥列表。用户将选择其中两个键并点击“运行”。然后,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))
谢谢!
【问题讨论】: