我必须从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程序中读取的结果。
答案 0 :(得分:1)
命令行参数不是标准输入。 args[0]
是命令行参数。你应该能够像
cmd = ['java', java_class, 'SomeInputString']