1 #@ MODIF exec_logiciel_ops Macro DATE 29/08/2006 AUTEUR MCOURTOI M.COURTOIS
2 # -*- coding: iso-8859-1 -*-
3 # CONFIGURATION MANAGEMENT OF EDF VERSION
4 # ======================================================================
5 # COPYRIGHT (C) 1991 - 2006 EDF R&D WWW.CODE-ASTER.ORG
6 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
7 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
8 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
9 # (AT YOUR OPTION) ANY LATER VERSION.
11 # THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
12 # WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
13 # MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
14 # GENERAL PUBLIC LICENSE FOR MORE DETAILS.
16 # YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
17 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
18 # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
19 # ======================================================================
24 from types import ListType, TupleType
25 EnumTypes = (ListType, TupleType)
27 # ------------------------------------------------------------------------------
28 def exec_logiciel_ops(self, LOGICIEL, ARGUMENT, MAILLAGE, CODE_RETOUR_MAXI, INFO, **args):
30 Macro IMPR_FONCTION permettant d'imprimer dans un fichier des fonctions,
32 Erreurs<S> dans IMPR_FONCTION pour ne pas perdre la base.
36 from Utilitai.Utmess import UTMESS
37 from Utilitai.System import ExecCommand
38 from Utilitai.UniteAster import UniteAster
40 PRE_GMSH = self.get_cmd("PRE_GMSH")
41 PRE_GIBI = self.get_cmd("PRE_GIBI")
42 LIRE_MAILLAGE = self.get_cmd("LIRE_MAILLAGE")
45 # La macro compte pour 1 dans la numerotation des commandes
48 #----------------------------------------------
49 # constantes des modes d'exécution
54 # paramètres nécessaires pour écrire la ligne de commande
55 # !! d_para['options'] est une liste !!
56 d_para = {'prog' : '', 'options' : ''}
61 if type(l_args) not in EnumTypes:
64 #----------------------------------------------
65 # 1. Préparation des données
66 # 1.1. EXEC_LOGICIEL standard
68 mode_lancement = CMD_EXTERNE
69 cmd = '%(prog)s %(options)s'
71 # 1.2. Cas "lancement d'un mailleur"
74 dMCF = mcf.cree_dict_valeurs(mcf.mc_liste)
75 d_para['fichIN'] = 'fort.%d' % dMCF['UNITE_GEOM']
76 d_para['fichOUT'] = 'fort.%d' % dMCF['UNITE']
78 if dMCF['FORMAT'] == 'GMSH':
79 mode_lancement = CMD_EXTERNE
80 cmd = '%(prog)s %(options)s -o %(fichOUT)s %(fichIN)s'
81 d_para['prog'] = os.path.join(aster.repout(), 'gmsh')
82 d_para['options'] = ('-3',)
84 elif dMCF['FORMAT'] == 'GIBI':
85 mode_lancement = CMD_EXTERNE
86 cmd = '%(prog)s %(options)s %(fichIN)s %(fichOUT)s'
87 d_para['prog'] = os.path.join(aster.repout(), 'gibi')
89 elif dMCF['FORMAT'] == 'SALOME':
90 mode_lancement = EXECFILE
92 UTMESS('F', macro, "FORMAT SALOME, L'ARGUMENT 1 DOIT ETRE " \
93 "LE NOM DU FICHIER MED PRODUIT PAR LE SCRIPT PYTHON.")
95 d_para['fichMED'] = l_args[0]
98 UTMESS('F', macro, "ON NE SAIT PAS TRAITER LE FORMAT '%s'" % dMCF['FORMAT'])
100 #----------------------------------------------
101 # 2. lecture des mots-clés
103 d_para['prog'] = LOGICIEL
106 d_para['options'] = l_args
107 d_para['options'] = ' '.join(d_para['options'])
109 #----------------------------------------------
111 # 3a. Lancement d'une commande externe
112 if mode_lancement == CMD_EXTERNE:
114 comment = "Lancement de la commande :\n%s" % scmd
115 iret, output = ExecCommand(scmd,
117 # écrire l'output dans le .mess si demandé
119 aster.affiche('MESSAGE', output)
121 if CODE_RETOUR_MAXI >= 0 and iret > CODE_RETOUR_MAXI:
122 UTMESS('F', macro, 'CODE RETOUR INCORRECT (MAXI %d) : %d' \
123 % (CODE_RETOUR_MAXI, iret))
125 #----------------------------------------------
126 # 3b. Exécution d'un fichier Python
127 elif mode_lancement == EXECFILE:
128 if d_para['prog'] != '':
129 UTMESS('A', macro, "LE MOT-CLE LOGICIEL N'EST PAS UTILISE AVEC CE FORMAT")
132 execfile(d_para['fichIN'], context)
134 traceback.print_exc()
135 txt = open(d_para['fichIN'], 'r').read()
136 UTMESS('F', macro, """ERREURS LORS DE L'EXECUTION DU FICHIER CI-DESSOUS :
137 <<<<<<<<<<<<<<< DEBUT DU FICHIER >>>>>>>>>>>>>>>
139 <<<<<<<<<<<<<<< FIN DU FICHIER >>>>>>>>>>>>>>>
142 if not os.path.exists(d_para['fichMED']):
143 UTMESS('F', macro, "LE FICHIER %s N'EXISTE PAS" % d_para['fichMED'])
145 # copie fichMED vers fichOUT pour pouvoir le récupérer
146 shutil.copyfile(d_para['fichMED'], d_para['fichOUT'])
149 UTMESS('F', macro, "Mode de lancement inconnu : %s" % mode_lancement)
151 #----------------------------------------------
152 # 4. Conversion du maillage
155 umail = UL.Libre(action='ASSOCIER',
156 nom='exec_logiciel.%s2mail' % dMCF['FORMAT'].lower())
158 # déclaration du concept maillage en sortie
159 self.DeclareOut('mail', dMCF['MAILLAGE'])
162 if dMCF['FORMAT'] == 'GMSH':
163 PRE_GMSH(UNITE_GMSH = dMCF['UNITE'],
164 UNITE_MAILLAGE = umail)
166 elif dMCF['FORMAT'] == 'GIBI':
167 PRE_GIBI(UNITE_GIBI = dMCF['UNITE'],
168 UNITE_MAILLAGE = umail)
170 elif dMCF['FORMAT'] == 'SALOME':
171 # ici l'unité en entrée de LIRE_MAILLAGE ne correspond pas au .mail
172 # mais au fichier MED en sortie du execfile.
173 umail = dMCF['UNITE']
174 etat = UL.Etat(umail, etat='O', TYPE='LIBRE', nom=d_para['fichMED'])
175 lire_mail_opts['FORMAT'] = 'MED'
176 lire_mail_opts['INFO_MED'] = INFO
178 mail = LIRE_MAILLAGE(UNITE = umail,