Quiero ejecutar un script, que básicamente muestra una salida como esta:
Installing XXX... [DONE]
Actualmente, imprimo Installing XXX...
primero y luego imprimo [DONE]
.
Sin embargo, ahora quiero imprimir Installing xxx...
y [DONE]
en la misma línea.
¿Algunas ideas?
python
printing
stdout
line-breaks
usuario697108
fuente
fuente
Respuestas:
Puede usar la
print
declaración para hacer esto sin importarsys
.La coma al final de la
print
línea evita laprint
emisión de una nueva línea (debe tener en cuenta que habrá un espacio adicional al final de la salida).La solución Python 3
Dado que lo anterior no funciona en Python 3, puede hacerlo en su lugar (nuevamente, sin importar
sys
):La función de impresión acepta un
end
parámetro predeterminado"\n"
. Establecerlo en una cadena vacía evita que emita una nueva línea al final de la línea.fuente
print("...", end="", flush=True)
en Python 3, en Python 2 agregar unasys.stdout.flush()
llamada.print("Progress: {}%".format(var), end="\r", flush=True)
Simplemente puede usar esto:
y la salida será
no hay necesidad de exagerar
import sys
. Presta atención al símbolo de coma al final.Python 3+
print("some string", end="");
para eliminar la inserción de nueva línea al final. Leer más porhelp(print);
fuente
print
la función tiene una sintaxis ligeramente diferente en python 2 VS 3.Debe usar la tecla de retroceso ' \ r ' o (' \ x08 ') char para volver a la posición anterior en la salida de la consola
Python 2+:
Python 3:
Este código contará del 0% al 100% en una línea. El valor final será:
Información adicional sobre flush en este caso aquí: ¿Por qué las declaraciones de impresión de Python que contienen argumentos 'end =' se comportan de manera diferente en los bucles while?
fuente
Uso
sys.stdout.write('Installing XXX... ')
ysys.stdout.write('Done')
. De esta manera, debe agregar la nueva línea a mano"\n"
si desea recrear la funcionalidad de impresión. Creo que podría ser innecesario usar maldiciones solo por esto.fuente
__future__
importaciones ni nada de eso.Ninguna de las respuestas funcionó para mí, ya que todas se detuvieron hasta que se encontró una nueva línea. Escribí un simple ayudante:
Para probarlo:
"hola" primero se imprimirá y se descargará en la pantalla antes de dormir. Después de eso, puede usar la impresión estándar.
fuente
sys.stdout.write
imprimirá sin carro de retornohttp://en.wikibooks.org/wiki/Python_Programming/Input_and_output#printing_without_commas_or_newlines
fuente
Más sencillo:
Python 3
Significa que retrocederá el cursor al principio, que imprimirá algo y terminará en la misma línea. Si en un bucle comenzará a imprimir en el mismo lugar donde comienza.
fuente
print(’something to be override’, end=‘\r’)
embargo, creo que eso es más simple.Este simple ejemplo imprimirá 1-10 en la misma línea.
fuente
La impresión tiene un
end
argumento opcional , es lo que se imprime al final. El valor predeterminado es una nueva línea, pero puede cambiarlo a una cadena vacía. p.ejprint("hello world!", end="")
fuente
print 'something',
. La coma al final evita la adición de una nueva línea.Si desea sobrescribir la línea anterior (en lugar de continuamente añadiendo a la misma), se pueden combinar
\r
conprint(),
al final de la instrucción de impresión. Por ejemplo,contará de 0 a 9, reemplazando el número anterior en la consola. Se
"...DONE!"
imprimirá en la misma línea que el último contador, 9.En su caso para el OP, esto permitiría que la consola muestre el porcentaje completo de la instalación como una "barra de progreso", donde puede definir una posición de inicio y fin del personaje, y actualizar los marcadores intermedios.
fuente
Aquí una versión compatible con 2.7 derivada de la versión 3.0 de @ Vadim-Zin4uk:
Python 2
Para el caso, la solución 3.0 proporcionada se ve un poco hinchada. Por ejemplo, el método de retroceso no utiliza el argumento entero y probablemente podría eliminarse por completo.
Python 3
Ambos han sido probados y funcionan.
fuente
Este es un hilo muy antiguo, pero aquí hay una respuesta muy completa y un código de muestra.
\r
es la representación de cadena del retorno de carro del juego de caracteres ASCII. Es lo mismo que octal015
[chr(0o15)
] o hexadecimal0d
[chr(0x0d)
] o decimal13
[chr(13)
]. Verman ascii
para una lectura aburrida. It (\r
) es una representación bastante portátil y es lo suficientemente fácil de leer para las personas. Simplemente significa mover el carro en la máquina de escribir hasta el inicio sin avanzar el papel. Es laCR
parte de loCRLF
que significa retorno de carro y avance de línea .print()
es una función en Python 3. En Python 2 (cualquier versión que le interese usar),print
puede forzarse a una función importando su definición desde el__future__
módulo. El beneficio de laprint
función es que puede especificar qué imprimir al final, anulando el comportamiento predeterminado de\n
imprimir una nueva línea al final de cadaprint()
llamada.sys.stdout.flush
le dice a Python que vacíe la salida de la salida estándar , que es donde envía la salida aprint()
menos que especifique lo contrario. También puede obtener el mismo comportamiento ejecutandopython -u
o configurando la variable de entornoPYTHONUNBUFFERED=1
, omitiendo así las llamadasimport sys
ysys.stdout.flush()
. La cantidad que gana al hacer eso es casi exactamente cero y no es muy fácil de depurar si olvida convenientemente que tiene que hacer ese paso antes de que su aplicación funcione correctamente.Y una muestra. Tenga en cuenta que esto funciona perfectamente en Python 2 o 3.
fuente
print () tiene un parámetro incorporado "end" que está configurado de forma predeterminada en "\ n" Llamar a print ("This is America") en realidad llama a print ("This is America", end = "\ n"). Una manera fácil de hacerlo es llamar a print ("This is America", end = "")
fuente
En caso de que haya almacenado previamente los valores en una matriz, puede llamarlos en el siguiente formato:
fuente
Python agrega nueva línea como un final para imprimir. Use end = '' para python3 para el método de impresión para agregar un espacio en lugar de una nueva línea. para python2 use una coma al final de la declaración de impresión.
fuente
Encontré esta publicación de Quora , con este ejemplo que funcionó para mí (python 3), que estaba más cerca de lo que necesitaba (es decir, borrar toda la línea anterior).
El ejemplo que brindan:
Para imprimir en la misma línea, como han sugerido otros, simplemente use
end=""
fuente
Encontré esta solución y está funcionando en Python 2.7
fuente
print
es una sintaxis incorrecta para Python 2.7 y el código no funciona incluso con la sintaxis correcta.