在 python 中通过 jpype 调用时重定向 jar 输出
Redirect jar output when called via jpype in python
我在 python 中使用 jpype 调用 jar 文件中的代码。 java 代码将一堆输出打印到标准输出,我只想将其重定向到 /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")
如果您需要对 OS 保持中立,则需要编译您自己的 NullPrintStream 概念,因为目前无法在 JPype 中扩展 class。
我在 python 中使用 jpype 调用 jar 文件中的代码。 java 代码将一堆输出打印到标准输出,我只想将其重定向到 /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")
如果您需要对 OS 保持中立,则需要编译您自己的 NullPrintStream 概念,因为目前无法在 JPype 中扩展 class。