Llamo a una función en una biblioteca java desde jython que imprime a stdout. Me gustaría suprimir esta salida del script jython. Intento que el modismo python reemplace sys.stdout con un archivo como objeto (StringIO), pero esto no captura la salida de la biblioteca java. Supongo que sys.stdout no afecta el programa java. ¿Existe una convención estándar para redirigir o suprimir esta salida programáticamente en jython? Si no, ¿de qué manera puedo lograr esto?Controlando stdout/stderr desde Jython
7
A
Respuesta
9
Puede utilizar System.setOut
, así:
>>> 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
Tenga en cuenta que esto no afectará a la salida de Python, porque Jython agarra System.out
cuando se pone en marcha para que pueda reasignar sys.stdout
como era de esperar.
1
He creado un gestor de contexto para imitar redirect_stdout de contextlib (de python3) (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)
Cuestiones relacionadas
- 1. ¿Es posible usar SWT desde Jython?
- 2. Invocar Jython desde Python (o viceversa)
- 3. Bash: controlando SSH
- 4. Controlando rsync con Python?
- 5. jython multithreading
- 6. jython syntaxerror?
- 7. ¿Cómo se ejecutan guiones jython multiproceso desde Java?
- 8. controlando la salida con RApacheOutputErrors
- 9. Controlando la verbosidad de make
- 10. Interoperabilidad de Scala y Jython
- 11. Crear byte [] en Jython
- 12. ¿Usando Jython con Django?
- 13. Aleatoriedad en Jython
- 14. Renombrar archivos, Python/Jython
- 15. Instalación de Jython en Ubuntu
- 16. Uso de ctypes con jython
- 17. fast-ish python/jython IPC?
- 18. Controlando el volumen en una aplicación Java
- 19. Controlando Python PLY estados lexer del analizador
- 20. Controlando iTunes con ASP.NET ejecutándose bajo IIS
- 21. Controlando las Afirmaciones de Java - Mejores Prácticas
- 22. Controlando la visibilidad de los valores enum
- 23. Python/jython coexistiendo en virtualenv
- 24. ejecutando bytecode jython usando java
- 25. Uso de Jython con M2Eclipse
- 26. Jython CLASSPATH, sys.path y controladores JDBC
- 27. ¿Llamar a Python desde Java a través del motor de scripts (jython)?
- 28. ¿Hay problemas para desarrollar Django en Jython?
- 29. Groovy ventajas sobre Jython o Jruby?
- 30. Ejecutar Jython y Python en un archivo