[英]How can I get output from subprocess.check_output if the subprocess is a java program(with Command-line arguments)?
我有以下Java代码:(HelloWorld.class在bin文件夹中):
package Hello;
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World" + args[1]);
}
}
我想从python脚本调用此Java代码,并将一些命令行参数传递给它。
所以我的python代码是:
cmd = ["java","-classpath","bin/","Hello.HelloWorld","arguement1","arguement2"]
try:
print subprocess.check_output(cmd,stderr=subprocess.STDOUT)
except: subprocess.CalledProcessError:
print ('calling '+ ' '.join(cmd) +' failed\n')
如果运行此代码,我将从Java代码获得no输出,并获得“调用java -classpath bin / Hello.HelloWorld争吵1争吵2失败”的输出。
但是如果我运行:
java -classpath bin/ Hello.HelloWorld arguement1 arguement2
在终端中,Java代码将打印字符串。
那么我的python代码哪里出问题了?
您看不到输出,因为stdout和stderr都被check_output(stderr=STDOUT)
捕获,并且java
退出时的退出状态为非零,这导致异常,这就是为什么您看到“ .. failed”消息的原因。
要在异常处理程序中获得子流程的输出( except CalledProcessErrror as e:
e.output
,请访问e.output
属性。
如果您不需要捕获输出,则只需调用call()
:
import subprocess
subprocess.check_call(cmd)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.