从Jython控制stdout/stderr

Mar*_*ddy 7 python java jython

我在jython的java库中调用一个函数,它打印到stdout.我想从jython脚本中抑制此输出.我尝试使用像object(StringIO)这样的文件替换sys.stdout的python习惯用法,但这不会捕获java库的输出.我猜测sys.stdout不会影响java程序.在jython中是否有以编程方式重定向或抑制此输出的标准约定?如果不是我能以什

Nic*_*ley 9

你可以System.setOut像这样使用:

>>> from java.lang import System 
>>> from java.io import PrintStream, OutputStream
>>> oldOut = System.out
>>> class NoOutputStream(OutputStream):         
...     def write(self, b, off, len): pass      
... 
>>> System.setOut(PrintStream(NoOutputStream()))
>>> System.out.println('foo')                   
>>> System.setOut(oldOut)
>>> System.out.println('foo')                   
foo
Run Code Online (Sandbox Code Playgroud)

请注意,这不会影响Python输出,因为Jython System.out在启动时会抓取,因此您可以sys.stdout按照预期重新分配.