我有以下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代码哪里出错了?
答案 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()