【问题标题】:Running Java on Server from Django从 Django 在服务器上运行 Java
【发布时间】: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)) 

谢谢!

【问题讨论】:

    标签: java python django shell


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-12
      • 1970-01-01
      • 1970-01-01
      • 2015-12-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多