Java 子处理额外输出到控制台

Java subprocess extra output to console

我编写了一个 java 程序,它启动子进程(通过 ProcessBuilder)并在不同的线程中处理它们的 I/O(Process.getInputStream(),Process.getErrorStream(),Process.getOutputStream())流.

我的 java-程序作为服务器工作,我不希望子进程向控制台输出额外的信息,并且 在 IDE 的控制台中它工作正常,但是如果我尝试从 windows 或 linux 控制台 运行 程序 java -jar ...,子进程将输出写入我的程序和控制台。

P.S。我从 java 执行 Python 脚本文件,例如我的 python 脚本打印测试字符串 "Hello World" 1000 次。 我的程序处理得很好,但我也在控制台中看到它的输出。

是否有某种 "console" 我需要以某种方式从进程中分离出来?

更新:

这里我得到了一个用于 运行 宁 python 的 ProcessBuilder(我将脚本的目录作为参数传递):

private ProcessBuilder getBuilder(File directory) {
    return new ProcessBuilder("python", "-u").directory(directory);
}

这里我从构建器开始一个流程,return它进一步处理( 我将脚本的目录和参数传递给脚本):

 public Process execute(Path dir, String... args) {
    if (!Files.exists(dir) || !Files.isDirectory(dir))
        throw new IllegalArgumentException("Provided path " + dir + " is not a directory or doesn't exist");
    ProcessBuilder builder = getBuilder(dir.toFile());
    if (args.length > 0) {
        builder.command().addAll(Arrays.asList(args));
    }
    try {
        return builder.start();
    } catch (IOException io) {
        io.printStackTrace();
        return null;
    }
}

这是一个测试哑脚本:

i=0;
while True:
    if i%1000000==0:
        print ('Hello, world!')
    i+=1

我不知道 post 我的流处理程序是否有意义,因为它们看起来像其他主题中的标准 gobbler,但它们从进程 out/error 读取到队列并获取输入来自另一个队列,java 程序处理队列并且除了记录器消息外没有输出到控制台。

但似乎子进程本身会写入控制台,但也许我错了。

我没有找到如何以编程方式执行此操作。 对我有帮助的唯一方法是在启动 jar 文件时将输出重定向到 /dev/null。 挺合适的,因为我也是通过网络获取到客户端的输出。