HOWTO · Python

Comment imprimer pour stderr en Python

Le tutoriel montre comment imprimer sur stderr en Python.

Sur cette page

Ce tutoriel explique comment écrire sur la sortie d’erreur standard, stderr, en Python. Il donne également quelques exemples de codes pour expliquer les différentes façons d’écrire dans stderr, car la syntaxe a changé au fil du temps.

Imprimer vers stderr en Python 3.x

Pour Python3.x, la fonction print a un argument de mot-clé file qui spécifie la destination de l’impression. Il s’agit de sys.stdout par défaut mais peut être sys.stderr ou même un chemin de fichier.

Elle imprime le message vers stderr si file=sys.stderr. Un exemple de code est donné ci-dessous :

import sys

print("Error", file=sys.stderr)

Production :

Error

Impression vers stderr en Python 2.x

Pour Python 2.x, l’instruction print peut imprimer le message vers une destination de type file-like comme stdout, stderr, ou un chemin de fichier. Cet objet file-like est spécifié après l’instruction >>. Voir l’exemple ci-dessous.

import sys

print >>sys.stderr, "Error Detected!"

Production :

Error Detected!

Utilisez le fichier sys.stderr pour imprimer vers stderr

Le module sys de Python fournit des informations précieuses et des fonctionnalités clés. La méthode sys.stderr.write() peut être utilisée. La méthode sys.stderr.write() imprime le message en tant que paramètre donné à la stderr. Voir l’exemple ci-dessous.

import sys

sys.stderr.write("Error!")

Production :

Error!

Utilisez le module logging pour imprimer vers stderr

Le module logging en Python est spécifiquement créé pour enregistrer les messages. Le module de journalisation peut être utilisé pour imprimer sur stderr après avoir défini la configuration de base. Le module logging.basicConfig() prend le format message en entrée, et logging.getLogger() retourne un objet de la logging. Le log.warning() prend le texte warning et l’imprime dans stderr.

Un exemple de base de cette approche est présenté ci-dessous :

import logging

logging.basicConfig(format="%(messages)s")
log = logging.getLogger()

log.warning("Error Found!")

Production :

Error Found!