Перенаправить вывод JAR при вызове через Jpype в Python - PullRequest
0 голосов
/ 25 июня 2019

Я вызываю код в jar-файле, используя jpype в python. Код 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 Ответ

1 голос
/ 27 июня 2019

Кража из здесь , а затем перевод на 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.

...