gpt4 book ai didi

java - 在 python 中通过 jpype 调用时重定向 jar 输出

转载 作者:行者123 更新时间:2023-12-02 09:44:37 25 4
gpt4 key购买 nike

我正在 python 中使用 jpype 调用 jar 文件中的代码。 java 代码将一堆输出打印到 stdout,我想将其重定向到/dev/null。我该怎么做?我无法修改 java 代码(因为它是外部项目)。

这是我的Python代码:

import jpype
import jpype.imports
jpype.startJVM(jpype.getDefaultJVMPath(), '-Djava.class.path=%s' % astral)
jpype.imports.registerDomain('phylonet')
from phylonet.coalescent import CommandLine
CommandLine.main(['-i', input_file, '-o', output_file])
jpype.shutdownJVM()

幸运的是,我可以将所需的输出重定向到文件,但我仍然将大量不需要的输出直接发送到标准输出。我在进程池中调用多个实例,因此最终会从多个 Java 代码实例中得到乱码输出。

最佳答案

窃取 here然后翻译成Python/JPype

import jpype
import jpype.imports
from jpype.types import *

jpype.startJVM(convertStrings=False)

from java.lang import System
from java.io import PrintStream, File

original = System.out
System.out.println("Hello")
System.setOut(PrintStream(File("NUL"))) # NUL for windows, /dev/null for unix
System.out.println("Big")
System.setOut(original)
System.out.println("Boy")

如果您需要对操作系统保持中立,则需要编译自己的 NullPrintStream 概念,因为目前无法在 JPype 中扩展类。

关于java - 在 python 中通过 jpype 调用时重定向 jar 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56760450/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com