Java Processbuilder - 捕获另一个脚本的退出值?

时间:2014-05-06 07:03:49

标签: java process processbuilder

我尝试在我的java程序中运行python脚本。我想要做的是捕获python程序的exitValue并通过System.out.println将其写出来。

这是Python代码:

import sys
import subprocess
print "hallo"
i = sys.argv[0]
path = "R:\\xxx\\xxx\\xxx\\read"
resultlist = []

if i == 0:
  result = True
else:
  result = False  

resultlist.append(result)
resultlist.append(path)
sys.exit(resultlist)

Processbuilder方法.waitFor()和.exitValue()只给出0或1。所以我无法使用它。

有没有办法从我的java程序中的python脚本中捕获sys.exit(resultlist)的值/字符串?

1 个答案:

答案 0 :(得分:0)

man 2 exit

The function _exit() terminates the calling process "immediately".  Any open file descriptors belonging to the process are closed; any children of the process
are inherited by process 1, init, and the process's parent is sent a SIGCHLD signal.

**The value status is returned to the parent process as the process's exit status, and can be collected using one of the wait(2) family of calls.**

您无法使用exit(2)(系统调用)返回“复杂值”。如果python做到那么好,但这是一个“技巧”。不要依赖它。

您要做的是将程序的输出打印到stdout并捕获标准输出。为此,请使用Process的{​​{1}}并将其吞入,例如.getInputStream()

由于您使用ByteArrayOutputStream,因此您还可以在执行流程之前使用其ProcessBuilder方法。从Java 7开始,它有quite a few options available