繁体   English   中英

如果子进程是Java程序(带有命令行参数),如何从subprocess.check_output获取输出?

[英]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.

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