代码之家  ›  专栏  ›  技术社区  ›  d4rty

Python——执行Java——找不到或加载主类[复制]

  •  0
  • d4rty  · 技术社区  · 6 年前

    这个问题已经有了答案:

    我跟着 SO Answer 从Python执行Java程序

    import os.path, subprocess
    from subprocess import STDOUT, PIPE
    
    
    def compile_java(java_file):
        subprocess.check_call(['javac', java_file])
    
    
    def execute_java(java_file, stdin):
        java_class, ext = os.path.splitext(java_file)
        cmd = ['java', java_class]
        process = subprocess.Popen(cmd, stdin=PIPE, stdout=PIPE, stderr=STDOUT, universal_newlines=True)
        stdout, stderr = process.communicate(stdin)
        print(stdout)
    
    
    compile_java(os.path.join('model', 'classification', 'Model.java'))
    execute_java('Model', '5 6 7 8')
    

    python代码编译 /model/classification/Model.java 没有问题。但是当Python代码执行Java程序时, Java无法找到或加载主类模型 . 正在执行 java Model 在同一目录下的命令行中(使用编译后的版本,该版本由上面的python片段触发) 作品 .

    1 回复  |  直到 6 年前
        1
  •  0
  •   0x1C1B    6 年前

    问题似乎是,您必须添加 *.class 文件到类路径!你编译了目录中的类 model/classification 所以你的道路 *.等级 文件是 model/classification/Model.class 。要执行这个字节码,您需要通过写入将目录添加到类路径 java -cp model/classification Model

    这个python代码适用于我:

    import os.path,subprocess
    from subprocess import STDOUT,PIPE
    
    def compile_java(java_file):
        subprocess.check_call(['javac', java_file])
    
    def execute_java(java_file, stdin):
        java_class,ext = os.path.splitext(java_file)
    
        // I changed the following line by adding the directory to the classpath
        cmd = ['java', '-cp', 'model/classification', java_class]
    
        proc = subprocess.Popen(cmd, stdin=PIPE, stdout=PIPE, stderr=STDOUT)
        stdout,stderr = proc.communicate(stdin)
        print ('This was "' + stdout + '"')
    
    compile_java(os.path.join('model', 'classification', 'Model.java'))
    execute_java('Model.java', '5 6 7 8')
    

    在这种情况下,目录路径是相对于Python脚本的执行目录的!