in

impresión – ¿Cómo imprimir en stderr en Python?

apple touch icon@2

La respuesta a la pregunta es: Hay diferentes formas de imprimir stderr en python, pero eso depende de 1.) qué versión de Python estamos usando 2.) qué salida exacta queremos.

La diferencia entre la función de escritura de impresión y stderr:
stderr : stderr (error estándar) es una tubería que está integrada en todos los sistemas UNIX / Linux, cuando su programa falla e imprime información de depuración (como un rastreo en Python), va a la tubería stderr.

impresión: print es un contenedor que formatea las entradas (la entrada es el espacio entre el argumento y la nueva línea al final) y luego llama a la función de escritura de un objeto dado, el objeto dado por defecto es sys.stdout, pero podemos pasar un archivo, es decir, también podemos imprimir la entrada en un archivo.

Python2: si estamos usando python2 entonces

>>> import sys
>>> print "hi"
hi
>>> print("hi")
hi
>>> print >> sys.stderr.write("hi")
hi

La coma final de Python2 se ha convertido en Python3 en un parámetro, por lo que si usamos comas finales para evitar el salto de línea después de una impresión, esto en Python3 se verá como print (‘Texto para imprimir’, end = ») que es un error de sintaxis en Python2 .

http://python3porting.com/noconv.html

Si marcamos el mismo escenario anterior en python3:

>>> import sys
>>> print("hi")
hi

En Python 2.6 hay una futuro importar para convertir la impresión en una función. Entonces, para evitar errores de sintaxis y otras diferencias, debemos comenzar cualquier archivo donde usemos print () con from futuro import print_function. los futuro La importación solo funciona en Python 2.6 y versiones posteriores, por lo que para Python 2.5 y versiones anteriores tiene dos opciones. Puede convertir la impresión más compleja en algo más simple o puede usar una función de impresión separada que funcione tanto en Python2 como en Python3.

>>> from __future__ import print_function
>>> 
>>> def printex(*args, **kwargs):
...     print(*args, file=sys.stderr, **kwargs)
... 
>>> printex("hii")
hii
>>>

Caso: Tenga en cuenta que sys.stderr.write () o sys.stdout.write () (stdout (salida estándar) es una tubería que está integrada en todos los sistemas UNIX / Linux) no reemplaza la impresión, pero sí podemos usarlo como alternativa en algún caso. Print es un contenedor que envuelve la entrada con espacio y nueva línea al final y usa la función de escritura para escribir. Esta es la razón por la que sys.stderr.write () es más rápido.

Nota: también podemos rastrear y depurar usando Logging

#test.py
import logging
logging.info('This is the existing protocol.')
FORMAT = "%(asctime)-15s %(clientip)s %(user)-8s %(message)s"
logging.basicConfig(format=FORMAT)
d = {'clientip': '192.168.0.1', 'user': 'fbloggs'}
logging.warning("Protocol problem: %s", "connection reset", extra=d)

https://docs.python.org/2/library/logging.html#logger-objects

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

scoffold

Ruby on Rails – Andamios

kafka topics

Temas de Kafka – javatpoint