Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Django在服务器上运行Java_Java_Python_Django_Shell - Fatal编程技术网

从Django在服务器上运行Java

从Django在服务器上运行Java,java,python,django,shell,Java,Python,Django,Shell,对于学校的一个研究项目,我需要从web界面运行java可执行文件。我使用Django是因为我对它有些熟悉(但不太熟悉)。该网站将显示第一个java程序输出的文件中的密钥列表。用户将选择其中两个键并点击“运行”。然后,Java可执行文件将从网站中获取指定的文件,并运行排序算法,然后将结果输出到另一个文件(需要在网站上呈现) 我现在使用的方法是使用视图中的子流程调用来运行shell脚本,该脚本处理java文件的编译和运行然而,当我通过Django运行shell文件时,我可以看到shell文件正在执行

对于学校的一个研究项目,我需要从web界面运行java可执行文件。我使用Django是因为我对它有些熟悉(但不太熟悉)。该网站将显示第一个java程序输出的文件中的密钥列表。用户将选择其中两个键并点击“运行”。然后,Java可执行文件将从网站中获取指定的文件,并运行排序算法,然后将结果输出到另一个文件(需要在网站上呈现)

我现在使用的方法是使用视图中的
子流程
调用来运行shell脚本,该脚本处理java文件的编译和运行然而,当我通过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

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

谢谢

运行Django服务器的用户可能在其
路径中没有
javac
java
。您应该在脚本中指定这些可执行文件的完整路径,您可以通过运行
which javac
which java
找到这些路径。运行Django服务器的用户可能在其
路径中没有
javac
java
。您应该在脚本中指定这些可执行文件的完整路径,您可以通过运行
which javac
which java
找到这些路径

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