java - 从 Jython 控制标准输出/标准错误

标签 java python jython

我正在从 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/

相关文章:

Java ArrayList addAll 只添加 1 个元素?

python - celery 没有找到 python-dateutil,尽管它已安装

java - 分发我的 JavaGameEngine(使用 Jython)

java - 单元/集成测试由通用方法组成的 dao

java - 拍照后,如何选择“确定”或“取消”按钮?使用 Selenium 网络驱动程序

python - 使用 python、boto3 在 Amazon S3 中创建目录

python - Python 的 "kind"是从什么开始的?

python - 使用 Jython 和 zxJDBC 进行具有多行值的 SQL INSET

java - Querydsl maven编译错误: QClass.类不存在

Python脚本动态查找firefox在打开url时监听的端口?