我打電話給標準輸出從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中斷