salida de celda clara del cuaderno ipython en el código

132

En un portátil iPython, tengo un ciclo while que escucha un puerto serie y printlos datos recibidos en tiempo real.

Lo que quiero lograr es mostrar solo los últimos datos recibidos (es decir, solo una línea que muestra los datos más recientes. Sin desplazamiento en el área de salida de la celda)

Lo que necesito (creo) es borrar la salida de la celda anterior cuando recibo nuevos datos, y luego imprime los nuevos datos. Me pregunto cómo puedo borrar datos antiguos mediante programación.

aha
fuente

Respuestas:

265

Puede usar IPython.display.clear_outputpara borrar la salida de una celda.

from IPython.display import clear_output

for i in range(10):
    clear_output(wait=True)
    print("Hello World!")

Al final de este ciclo, solo verá uno Hello World!.

Sin un ejemplo de código, no es fácil darle un código de trabajo. Probablemente amortiguar los últimos n eventos es una buena estrategia. Siempre que cambie el búfer, puede borrar la salida de la celda e imprimir el búfer nuevamente.

cel
fuente
1
¡La interfaz ajax más sencilla de todas!
Unni
6060
Usar el clear_output(wait=True)generalmente hará que el resultado sea más agradable si tienes clear_outputdentro de un bucle.
Toke Faurby
1
la mitad de la pantalla después de que se agita el resultado de la impresión, pero agite menos gracias a wait = True
B.Mr.W.
1
¿Por qué estamos girando? ¿Qué pasa con i?
jorijnsmit
1
@jorijnsmit, solo para ilustrar ese "¡Hola Mundo!" no se imprime 10 veces, sino solo 1 vez. iRealmente no importa.
cel
2

Y en caso de que vengas aquí, como hice yo, buscando hacer lo mismo para las parcelas en un cuaderno de Julia en Jupyter, usando Plots, puedes usar:

    IJulia.clear_output(true)

así que para una especie de trama animada de múltiples carreras

    if nrun==1  
      display(plot(x,y))         # first plot
    else 
      IJulia.clear_output(true)  # clear the window (as above)
      display(plot!(x,y))        # plot! overlays the plot
    end

Sin la llamada clear_output, todos los gráficos aparecen por separado.

marzetti
fuente
2

Puede usar IPython.display.clear_output para borrar la salida como se menciona en la respuesta de cel. Agregaría que para mí la mejor solución era usar esta combinación de parámetros para imprimir sin ninguna "sacudida" del cuaderno:

from IPython.display import clear_output

for i in range(10):
    clear_output(wait=True)
    print(i, flush=True)
hof.and.or
fuente