繁体   English   中英

从Python调用Java程序(带有参数),然后将结果返回给Python

[英]Call java program (with arguments) from Python and return results back to Python

我必须从Python执行一个Java文件(传递单个参数),执行后,将结果返回给调用它的脚本。 我写了一个小的Java测试程序,该程序接受一个参数并将某些内容输出到stdout。 这是java程序

import java.util.*;
class TestX
{
       public static void main(String args[])
       {
            String someString = "Your input";
            System.out.println(someString + " " + args[0]);
            int resultOfSomething = 45;
            String someOutput = "Program's output is " + resultOfSomething;
            System.out.println(someOutput);
       }
}

这是调用Java程序的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):
    java_class,ext = os.path.splitext(java_file)
    cmd = ['java', java_class]
    proc = subprocess.Popen(cmd, stdout=PIPE, stderr=STDOUT)
    stdout,stderr = proc.communicate(input='SomeInputstring')
    print ('This was "' + stdout + '"')

compile_java('TestX.java')
execute_java('TestX.java')

我应该提到我对Java不熟悉。 我通过此命令javac TestX.java编译了小的Java程序。 那创建了一个类文件。 当我使用java TestX SomeTestString从命令行运行Java程序时,小型Java程序会按预期工作,并向控制台输出一些文本。

现在的问题; 当我使用上面的代码从Python运行相同的Java程序时-1)错误

This was "Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0

        at TestX.main(TestX.java:7)
"

当我注释掉Python程序中的行print ('This was "' + stdout + '"')时,Python程序将运行并似乎在执行Java程序,但是没有任何内容返回到控制台。 我在这里错过了一些非常简单的事情,或者这只是我犯的一个愚蠢的错误。 有指针吗? 谢谢。

我尝试了几种不同的方法来输出结果,例如使用printf,甚至使用此类StdOut 它们似乎都表现相同。

简而言之,就是这个; 我的Python脚本应使用单个参数调用Java程序。 Java程序接受输入,执行某些功能并返回结果,我应该能够从调用它的Python程序中读取该结果。

命令行参数不是标准输入。 args[0]是命令行参数。 你应该能够做到

cmd = ['java', java_class, 'SomeInputString']

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM