Bienvenue sur IndexError.

Ici vous pouvez poser des questions sur Python et le Framework Django.

Consultez la FAQ pour améliorer vos chances d'avoir des réponses à vos questions.

recuperer erreur suite a commande bash

+2 votes

J' étudie le code source de programmes en python2 pour en comprendre les parties importantes et les recycler sur des projets en python3.

Le code suivant doit permettre de convertir automatiquement tous les fichiers python d'un répertoire en python3, puis d'en extraire le schéma UML. J' utilise pyreverse.

#! /usr/bin/env python3
# -*- encoding: utf-8 -*-

import os
import subprocess


files = [f for f in os.listdir('.') if os.path.isfile(f)]
i = 0
for f in files:

    filename, file_extension = os.path.splitext(f)

    if file_extension == '.py':
        if filename != 'xyz2to3':
            i += 1
            print('\n      -',i,'-     encore un script python  :  ',filename)

            subprocess.call(["2to3", "-w", f])
            print('\n     ',filename,' has been 2to3--ed  !!!')

            subprocess.call(["pyreverse", "-o", "png", f])
            print('\n     ',filename,' has been pyreversed  !!!')

j'ai appelé ce script xyz2to3.py
Le problème c'est que :
1- certains fichiers peuvent parfois crasher, avec pour message:
invalid syntax (< string >, line NUMERO_DE_LIGNE_FOIREUSE)

2-même quand ça se passe bien , le schéma UML contenu dans le fichier classes_No_Name.png s'écrase à chaque tour de boucle, plutôt que d' avoir une multitude de fichiers png aux noms différents.

(j'ai écrit ce script car je n'ai pas trouvé comment attaquer frontalement main.py qui m'aurait livré l’intégralité du schéma UML du projet.)
article relié : http://indexerror.net/3389/obtenir-automatiquement-arborisation-imports-document%C3%A9s

comment récupérer les messages d' erreur suite à une commande bash pour inserer des traitements conditionnels ?

comment éviter dans ma boucle d' écraser les images successives produits par pyreverse?

demandé 15-Fev-2016 par buffalo974 (2,956 points)
edité 15-Fev-2016 par Nsukami_
try:
    subprocess.check_output([listeArgumentsCommandeBash])
    print('\n     supercool !!!')
except subprocess.CalledProcessError:
    print('\n plantage du bash detected')

1 Réponse

+4 votes
 
Meilleure réponse

Tu peux récupérer les erreurs provoquées par ton script en récupérant la valeur de retour de subprocess.call, qui sera la valeur de retour du script. Pour récupérer les messages d'erreur, il faut sans doute regarder du coté de stderr.

Pour ta seconde question, il faut voir dans la doc de pyreverse (tu peux aussi regarder ).

répondu 15-Fev-2016 par yoch (2,514 points)
sélectionné 16-Fev-2016 par buffalo974
...