2016-02-29 184 views
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)) 

謝謝!

回答

0

運行您的Django服務器的用戶可能沒有javacjava它的PATH。您應該在腳本中指定這些可執行文件的完整路徑,您可以通過運行which javacwhich java來找到這些路徑。

相關問題