【问题标题】:Redirect jar output when called via jpype in python在python中通过jpype调用时重定向jar输出
【发布时间】:2019-06-25 18:57:49
【问题描述】:

我在 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 代码实例的乱码输出。

【问题讨论】:

    标签: java python jpype


    【解决方案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 中扩展类。

    【讨论】:

    • 我最终也使用了 System.setErr() 来重定向标准错误。干得好!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-13
    • 1970-01-01
    • 2022-11-30
    • 1970-01-01
    • 2014-11-28
    • 2018-12-03
    • 2021-01-30
    相关资源
    最近更新 更多