如何从子流程获取输出。如果子流程是java程序(带有命令行参数),请检查\u输出?

如何从子流程获取输出。如果子流程是java程序(带有命令行参数),请检查\u输出?,java,python,subprocess,command-line-arguments,Java,Python,Subprocess,Command Line Arguments,我有以下java代码:(HelloWorld.class位于bin文件夹中): 我想从python脚本中调用此java代码,并向其传递一些命令行参数 因此,我的python代码是: cmd = ["java","-classpath","bin/","Hello.HelloWorld","arguement1","arguement2"] try: print subprocess.check_output(cmd,stderr=subprocess.STDOUT) except: su

我有以下java代码:(HelloWorld.class位于bin文件夹中):

我想从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 arguement1 arguement2失败”输出

但如果我跑步:

java -classpath bin/ Hello.HelloWorld arguement1 arguement2 
在终端中,java代码将打印字符串


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

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

要在异常处理程序
中获取子进程的输出(被调用的进程错误除外),请访问
e.output
属性

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

import subprocess

subprocess.check_call(cmd)

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

要在异常处理程序
中获取子进程的输出(被调用的进程错误除外),请访问
e.output
属性

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

import subprocess

subprocess.check_call(cmd)

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