write print example español python printing stdout

print - sys stdout write() in python



¿La diferencia entre sys.stdout.write y print? (11)

¿Hay situaciones en las que es preferible imprimir sys.stdout.write ()?

He descubierto que la salida estándar funciona mejor que la impresión en una situación de subprocesos múltiples. Utilizo Cola (FIFO) para almacenar las líneas a imprimir y sostengo todos los hilos antes de la línea de impresión hasta que mi Q de impresión esté vacía. Aun así, al usar print, a veces pierdo la / n final en la E / S de depuración (usando wing pro IDE).

Cuando uso std.out con / n en la cadena, los formatos de E / S de depuración correctamente y los / n se muestran con precisión.

¿Hay situaciones en las que es preferible print sys.stdout.write() ?

( Ejemplos: mejor rendimiento; código que tiene más sentido)


¿Hay situaciones en las que es preferible imprimir sys.stdout.write ()?

Por ejemplo, estoy trabajando en una pequeña función que imprime estrellas en formato piramidal al pasar el número como argumento, aunque puede hacerlo usando end = "" para imprimir en una línea separada, usé sys.stdout.write en coordinación Con impresión para hacer este trabajo. Para más detalles sobre esto, stdout.write imprime en la misma línea donde, al imprimir, siempre imprime su contenido en una línea separada.

import sys def printstars(count): if count >= 1: i = 1 while (i <= count): x=0 while(x<i): sys.stdout.write(''*'') x = x+1 print('''') i=i+1 printstars(5)


Mi pregunta es si hay o no situaciones en las que sys.stdout.write() es preferible print

Después de terminar de desarrollar un script el otro día, lo subí a un servidor Unix. Todos mis mensajes de depuración utilizaron sentencias de print , y estas no aparecen en el registro del servidor.

Este es un caso en el que puede necesitar sys.stdout.write en sys.stdout.write lugar.


Mi pregunta es si hay o no situaciones en las que sys.stdout.write() es preferible print

Si está escribiendo una aplicación de línea de comandos que puede escribir tanto en archivos como en stdout, entonces es útil. Puedes hacer cosas como:

def myfunc(outfile=None): if outfile is None: out = sys.stdout else: out = open(outfile, ''w'') try: # do some stuff out.write(mytext + ''/n'') # ... finally: if outfile is not None: out.close()

Significa que no puede usar el patrón with open(outfile, ''w'') as out: patrón with open(outfile, ''w'') as out: pero a veces vale la pena.


"imprimir" primero convierte el objeto en una cadena (si aún no es una cadena). También colocará un espacio antes del objeto si no es el comienzo de una línea y un carácter de nueva línea al final.

Cuando use stdout, necesita convertir el objeto en una cadena (llamando a "str", por ejemplo) y no hay ningún carácter de nueva línea.

Asi que

print 99

es equivalente a:

import sys sys.stdout.write(str(99) + ''/n'')


Aquí hay un ejemplo de código basado en el libro Learning Python por Mark Lutz que responde a su pregunta:

import sys temp = sys.stdout # store original stdout object for later sys.stdout = open(''log.txt'', ''w'') # redirect all prints to this log file print("testing123") # nothing appears at interactive prompt print("another line") # again nothing appears. it''s written to log file instead sys.stdout.close() # ordinary file object sys.stdout = temp # restore print commands to interactive prompt print("back to normal") # this shows up in the interactive prompt

Abrir log.txt en un editor de texto revelará lo siguiente:

testing123 another line


En 2.x, la declaración de print preprocesa lo que le das, convirtiéndolo en cadenas en el camino, manejando separadores y nuevas líneas, y permitiendo la redirección a un archivo. 3.x lo convierte en una función, pero aún tiene las mismas responsabilidades.

sys.stdout es un archivo o sys.stdout un archivo que tiene métodos para escribir en él que llevan cadenas o algo por el estilo.


En Python 3, existe una razón válida para usar la impresión sobre sys.stdout.write , pero esta razón también se puede convertir en una razón para usar sys.stdout.write en sys.stdout.write lugar.

Esta razón es que, ahora, imprimir es una función en Python 3, puede anular esta opción. Por lo tanto, puede usar imprimir en cualquier lugar en un simple script y decidir que las declaraciones de impresión necesitan escribir en stderr lugar. Ahora puede simplemente redefinir la función de impresión, incluso podría cambiar la función de impresión global cambiándola utilizando el módulo incorporado. Por supuesto, con file.write puede especificar qué archivo es, pero al sobrescribir la impresión también puede file.write a definir el separador de línea o el separador de argumento.

La otra manera es. Tal vez esté absolutamente seguro de que escribe en stdout , pero también sabe que va a cambiar la impresión a otra cosa, puede optar por usar sys.stdout.write y usar la impresión para el registro de errores o alguna otra cosa.

Entonces, lo que uses depende de cómo intentes usarlo. print es más flexible, pero eso puede ser una razón para usar y no usarla. Todavía optaría por la flexibilidad en su lugar, y elegir imprimir. Otra razón para usar la print es la familiaridad. Más personas sabrán ahora lo que quiere decir con letra impresa y menos conocerán sys.stdout.write .


Hay al menos una situación en la que desea sys.stdout lugar de imprimir.

Cuando desea sobrescribir una línea sin pasar a la siguiente, por ejemplo, mientras dibuja una barra de progreso o un mensaje de estado , debe pasar algo como

Note carriage return-> "/rMy Status Message: %s" % progress

Y como la impresión agrega una nueva línea, es mejor usar sys.stdout .


es preferible cuando la impresión dinámica es útil, por ejemplo, para proporcionar información en un proceso largo:

import time, sys Iterations = 555 for k in range(Iterations+1): # some code to execute here ... percentage = k / Iterations time_msg = "/rRunning Progress at {0:.2%} ".format(percentage) sys.stdout.write(time_msg) sys.stdout.flush() time.sleep(0.01)


print es solo una envoltura delgada que formatea las entradas (modificable, pero por defecto con un espacio entre argumentos y nueva línea al final) y llama a la función de escritura de un objeto determinado. De forma predeterminada, este objeto es sys.stdout , pero puede pasar un archivo utilizando el formulario "chevron". Por ejemplo:

print >> open(''file.txt'', ''w''), ''Hello'', ''World'', 2+3

Consulte: https://docs.python.org/2/reference/simple_stmts.html?highlight=print#the-print-statement

En Python 3.x, la print convierte en una función, pero aún es posible pasar algo más que sys.stdout gracias al argumento del file .

print(''Hello'', ''World'', 2+3, file=open(''file.txt'', ''w''))

Consulte https://docs.python.org/3/library/functions.html#print

En Python 2.6+, la print sigue siendo una declaración, pero se puede usar como una función con

from __future__ import print_function

Actualización: Hay una pequeña diferencia entre la función de impresión y la declaración de impresión (y más generalmente entre una función y una declaración) señalada por Bakuriu en los comentarios.

En caso de error al evaluar argumentos:

print "something", 1/0, "other" #prints only something because 1/0 raise an Exception print("something", 1/0, "other") #doesn''t print anything. The func is not called