2016-02-29 187 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来找到这些路径。

相关问题