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

时间:2019-06-25 18:57:49

标签: java python jpype

我正在使用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代码实例中产生乱码。

1 个答案:

答案 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中扩展类。