从Python调用java程序(带参数),并将结果返回给Python

从Python调用java程序(带参数),并将结果返回给Python,java,python,subprocess,popen,Java,Python,Subprocess,Popen,我必须从Python执行一个java文件(传递一个参数),执行后,将结果返回给调用它的脚本。我编写了一个小java测试程序,它接受一个参数并向标准输出一些内容。这是java程序 import java.util.*; class TestX { public static void main(String args[]) { String someString = "Your input"; System.out.pri

我必须从Python执行一个java文件(传递一个参数),执行后,将结果返回给调用它的脚本。我编写了一个小java测试程序,它接受一个参数并向标准输出一些内容。这是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);
       }
}
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程序的Python脚本

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);
       }
}
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。我用javactestx.java命令编译了这个小java程序。创建了一个类文件。当我使用
javatestxsometeststring
从命令行运行java程序时,微小的java程序按预期工作,并向控制台输出一些文本

现在问题来了,;当我使用上面的代码从Python运行相同的java程序时-1)出现了一个错误

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

        at TestX.main(TestX.java:7)
"
当我注释掉Python程序中的行
print('这是“+stdout+”)
时,Python程序运行并似乎执行java程序,但没有返回到控制台。有一件非常简单的事情我在这里遗漏了,或者只是我犯了一个愚蠢的错误。有什么建议吗?谢谢

我尝试了几种不同的方法来输出结果,比如使用printf,甚至使用这个类。他们的行为似乎都一样

如果我简单地解释一下,就是这样; 我的Python脚本应该用一个参数调用java程序。
java程序接收输入,执行某些函数并返回一个结果,我应该能够从调用它的Python程序中读取该结果。

命令行参数不是stdin
args[0]
是一个命令行参数。你应该可以这样做

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