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))
謝謝!