Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在python中通过jpype调用时重定向jar输出_Java_Python_Jpype - Fatal编程技术网

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

Java 在python中通过jpype调用时重定向jar输出,java,python,jpype,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.registerDoma

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

从中窃取,然后转换为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()重定向stderr。干得好!