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

时间:2015-09-29 17:21:16

标签: java python subprocess 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代码的无输出,并且还获得输出“调用java -classpath bin / Hello.HelloWorld arguement1 arguement2 failed”。

但如果我跑:

java -classpath bin/ Hello.HelloWorld arguement1 arguement2 

在终端中,java代码将打印字符串。

那我的python代码哪里出错了?

1 个答案:

答案 0 :(得分:0)

您无法看到输出,因为[[post-config|$Q_META_CONF_FILE]] [DEFAULT] ... auth_url = http://<my_ip_adress>:35357/v2.0 ... admin_tenant_name = admin admin_user = admin admin_password = <admin_pwd> check_output(stderr=STDOUT)都会捕获stdout和stderr,退出状态为非零,导致异常,这就是您看到的原因&#34; ..失败&#34;信息。

获取子流程&#39;异常处理程序java中的输出,访问except CalledProcessErrror as e:属性。

如果您不需要捕获输出,请改为拨打e.output

call()