【问题标题】:How can I get output from subprocess.check_output if the subprocess is a java program(with Command-line arguments)?如果子进程是 java 程序(带有命令行参数),如何从 subprocess.check_output 获取输出?
【发布时间】:2015-12-27 07:03:46
【问题描述】:

我有以下 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 代码中得到无输出,并且还会得到输出“calling java -classpath bin/Hello.HelloWorldargument1argument2 failed”。

但如果我跑:

java -classpath bin/ Hello.HelloWorld arguement1 arguement2 

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

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

【问题讨论】:

  • 您确定调用命令是从您认为的位置开始的吗?尝试为您的 bin 目录使用绝对路径
  • python 脚本在 bin 的父目录下。

标签: java python subprocess command-line-arguments


【解决方案1】:

您看不到输出,因为 stdout 和 stderr 都被 check_output(stderr=STDOUT) 捕获,java 以非零退出状态退出导致异常,这就是您看到“.. failed”消息的原因.

要在异常处理程序except CalledProcessErrror as e: 中获取子进程的输出,请访问e.output 属性。

如果您不需要捕获输出,则只需调用call()

import subprocess

subprocess.check_call(cmd)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-08
    • 1970-01-01
    • 1970-01-01
    • 2020-03-21
    • 2014-09-23
    • 1970-01-01
    • 1970-01-01
    • 2019-08-23
    相关资源
    最近更新 更多