Alors que j’utilisais avec grand plaisir et grande fierté la fonction subprocess.check_output pour obtenir le résultat de mes commandes système associé à mes investigations, j’ai eu la désagréable surprise de se voir se croiser mon flux d’erreur avec mon flux de sortie standard dans le résultat ce qui le rendait méchamment inutilisable.

Réponse à la problématique

Utilisation de subprocess.run.

!/usr/bin/python3
# -*- coding: utf-8 -*-

import subprocess

executable="/home/eric/gesterr"

cmd_output = subprocess.run([executable], capture_output=True, text=True, encoding = 'utf8')

print ("Sortie : ", cmd_output.stdout)
print ("Erreur : ", cmd_output.stderr)

Le programme gesterr est un programme maison de manière à bien cerner les attendus.

#include <stdio.h>

int main()
{
	fprintf(stdout, "Sortie standard");
	fprintf(stderr, "Sortie d'erreur");
}

Pour obtenir un exécutable à partir de ce source,

  • mettre ce code dans un fichier de type texte en .c
  • exécuter la ligne de commande suivante :
    gcc gesterr.c -o gesterr

Documents

Accueil > Linux > Développement > [Python] Excuter une commande externe