我打电话给标准输出从jython调用java库中的函数。我想从jython脚本中取消这个输出。我尝试用像对象(StringIO)这样的文件替换sys.stdout的python习语,但是这并不捕获java库的输出。我猜sys.stdout不会影响Java程序。有没有一个标准的惯例重定向或压制这种输出在jython编程方式?如果我不能通过什么方式来实现这一点?从Jython控制标准输出/标准错误
7
A
回答
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
请注意,这不会影响Python的输出,因为Jython中抓住System.out
启动时这样你就可以重新分配sys.stdout
如你所期望。
1
我创建了一个上下文管理器模仿(Python3的)contextlib的redirect_stdout (gist here):
'''Wouldn't it be nice if sys.stdout knew how to redirect the JVM's stdout? Shooting star.
Author: Sean Summers <[email protected]> 2015-09-28 v0.1
Permalink: https://gist.githubusercontent.com/seansummers/bbfe021e83935b3db01d/raw/redirect_java_stdout.py
'''
from java import io, lang
from contextlib import contextmanager
@contextmanager
def redirect_stdout(new_target):
''' Context manager for temporarily redirecting sys.stdout to another file or file-like object
see contextlib.redirect_stdout documentation for usage
'''
# file objects aren't java.io.File objects...
if isinstance(new_target, file):
new_target.close()
new_target = io.PrintStream(new_target.name)
old_target, target = lang.System.out, new_target
try:
lang.System.setOut(target)
yield None
finally:
lang.System.setOut(old_target)
相关问题
- 1. Linux的标准输入,标准输出,标准错误
- 2. 保存标准输出,标准错误和标准输出+标准错误同步
- 3. 写入输出流3(标准输出或标准错误)
- 4. 从标准错误标准输出上区分开管
- 5. 如何从标准输出和标准错误
- 6. 从C#重定向原生dll标准输出/标准错误#
- 7. 从标准输出
- 8. 打开Windows控制台的标准输入/标准输出/标准输入/输出为win32和win64在C
- 9. 标准控制台输入
- 10. 包括标准输入输出错误
- 11. 标准错误重定向到标准输出
- 12. 如何如果标准输出没有活动/标准错误
- 13. 关于标准输出/标准错误重定向
- 14. Powershell将标准输出重定向到标准错误
- 15. Java:同步标准输出和标准错误
- 16. 同时读取子进程标准输出和标准错误
- 17. 将标准错误发送到标准输出不起作用
- 18. bash脚本不捕获标准输出,只是标准错误
- 19. Python traceback.print_exc()打印到标准输出或标准错误吗?
- 20. zsh:重置标准输出/标准错误重定向
- 21. 在Perl中处理Java标准输出和标准错误
- 22. 检查标准输出或标准错误
- 23. 捕获标准错误和标准输出的好方法
- 24. Python3:线程安全机制重定向标准输入,标准输出,标准错误
- 25. 将父进程的控制台(标准输出,标准错误等)输出重定向到子进程(反向)
- 26. 在Chrome中,我怎样才能得到JavaScript控制台输出到标准输出/标准错误
- 27. 是否有可能输出到监视流而不是标准输入,标准输出和标准错误? (python)
- 28. 发送JVM -verbose输出到标准错误而不是标准输出
- 29. Eclipse的标准输出/错误同步
- 30. 标准错误输出的Eclipse中断