我正在使用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()
幸运的是,我可以将所需的输出重定向到文件,但是我仍然直接将很多不良输出直接输出到stdout。我要在一个进程池中调用多个实例,所以最终我会从多个Java代码实例中产生乱码。
答案 0 :(得分:1)
从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中扩展类。