我正在从 jython 调用 java 库中的函数,该函数打印到标准输出。我想抑制 jython 脚本的输出。我尝试使用 python 惯用语将 sys.stdout 替换为类似对象 (StringIO) 的文件,但这不会捕获 java 库的输出。我猜 sys.stdout 不会影响 java 程序。在 jython 中是否有以编程方式重定向或抑制此输出的标准约定?如果不是,我可以通过什么方式实现?
最佳答案
你可以像这样使用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
请注意,这不会影响 Python 输出,因为 Jython 在启动时会获取 System.out
,因此您可以按预期重新分配 sys.stdout
。
关于java - 从 Jython 控制标准输出/标准错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5048166/