Précédent   Forum du club des développeurs et IT Pro > Autres langages > Python & Zope > Interfaçage autre langage
Interfaçage autre langage Forum d'entraide pour l'interfaçage avec d'autres langages (ctypes, api C, swig, ...)
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 15/06/2012, 10h40   #1
squallmrs
Invité régulier
 
Inscription : novembre 2008
Messages : 37
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 37
Points : 8
Points : 8
Par défaut [PYTHON/FORTRAN ( f2py )] Lecture ecriture de fichier

Bonjour tout le monde,
J'ai une fonction de lecture de fichier en fortran que j'essaie de lancer a partir de mon programme python.
Le problème est que mon programme python ne trouve pas les fonction READ()/WRITE.
Donc ma question est :
quel librairie dois-je linker pour que mon programme python trouve ces librairies contenant les fonction python READ et WRITE ?
squallmrs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2012, 13h38   #2
wiztricks
Expert Confirmé Sénior
 
Inscription : juin 2008
Messages : 3 710
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 3 710
Points : 4 547
Points : 4 547
Salut,

Je ne comprend pas trop.

Vous voulez depuis Python appeler les instructions fortran READ/WRITE?
Comme ce sont des instructions, le compilateur fortran les remplacera, lors de la génération du code, par des appels à des fonctions de sa librairie "interne". Ces fonctions (et leurs points d'entrées) dépendent du compilateur, varient suivant le type et la liste des arguments passés,...

Il sera plus simple de créer une fonction fortran qui "emballe" l'appel à ces instructions: vous connaîtrez alors point d'entrée et paramètres.

Ceci dit, pourquoi ne pas utiliser directement les méthodes .read .write de Python?
__________________
Architectures Post-Modernes
wiztricks est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2012, 14h44   #3
squallmrs
Invité régulier
 
Inscription : novembre 2008
Messages : 37
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 37
Points : 8
Points : 8
Effectivement c'est la solution temporaire que j'ai choisi pour le moment. J'utilise le read et write de python.

Mais la solution la plus propre pour mon projet serait celle ci :
J'ai une librairie fortran qui contient une fonction toto() qui fait le read/write d'un fichier et effectue des calculs.
A coté de cela, je crée un programme python qui crée un GUI et fait appel a cette fonction toto().

En ce qui concerne la clarté de mon projet j'aimerai juste séparer le coté GUI pour python, et garder le vieux code fortran deja existant pour tout les algorithmes créer sinon j'en ai pour plusieur mois de travail ...
squallmrs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2012, 15h07   #4
wiztricks
Expert Confirmé Sénior
 
Inscription : juin 2008
Messages : 3 710
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 3 710
Points : 4 547
Points : 4 547
Salut,

Citation:
Envoyé par squallmrs Voir le message
J'ai une librairie fortran qui contient une fonction toto() qui fait le read/write d'un fichier et effectue des calculs.
Pourquoi ne pas appeler toto depuis Python?
Ou plutôt qu'est ce qui ne fonctionne pas?

- W
__________________
Architectures Post-Modernes
wiztricks est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2012, 15h16   #5
squallmrs
Invité régulier
 
Inscription : novembre 2008
Messages : 37
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 37
Points : 8
Points : 8
Voici ma fonction TOTO.F le module créé se nomme Transf:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
 
SUBROUTINE TOTO
      CALL OPEN(25,'CALCUL','TRANSF','A',' ',' ',80,80)
 
      DO 20 I=1,NCOTE
        IF (I.EQ.IINF) GOTO 20
        IF (I.EQ.IPUIT) THEN
          WRITE(25,1003) I,T(I),'SINGULARITE'
        ELSE
          WRITE(25,1003) I,T(I)
        ENDIF
20    CONTINUE
 
      WRITE(25,*)
      WRITE(25,1000)'RAYON INTERIEUR ........................'
      WRITE(25,1000)'RAYON EXTERIEUR ........................'
      WRITE(25,*)
      WRITE(25,1000)'ANGLE INITIAL ..........................'
      WRITE(25,1000)'ANGLE FINAL ............................'
      WRITE(25,*)
      WRITE(25,1004)'INTENSITE SINGULARITE ..................',QPUIT
      WRITE(25,*)
      WRITE(25,1002)'NOMBRE DE LIGNES CALCULEES .............',NLIGNE
      WRITE(25,*)
      WRITE(25,1001)'FACTEUR DE PRECISION GLOBALE ........... 1.000D+00'
      WRITE(25,1001)'FACTEUR DE PRECISION COURTE DISTANCE ... 1.000D+00'
      WRITE(25,1001)'FACTEUR DE PRECISION LONGUE DISTANCE ... 1.000D+00'
      WRITE(25,*)
      WRITE(25,1002)'FREQUENCE DES MARQUES ..................',IMARQ
voici l etape de génération de l interface :
Code :
1
2
 
f2py -c $FFILE_LIST -m Transf --fcompiler=gnu95
voici le code python :
Code :
1
2
3
 
>>> import Transf
>>> Transf.toto()
ImportError: /ecf/xa99222/HodoGraph/V1.0_Python/transf/Transf.so: undefined symbol: open_

Et effectivement voici ce que donne un nm de Transf.so:
U open_

Alors que tout les autres algo de la librairie généré sont nickel...
squallmrs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2012, 19h52   #6
wiztricks
Expert Confirmé Sénior
 
Inscription : juin 2008
Messages : 3 710
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 3 710
Points : 4 547
Points : 4 547
Salut,

Je n'ai plus de compilateur gnu fortran pour tester les 2/3 idées que je pourrais avoir sur le sujet.

Pourriez vous préciser l'OS et la version de gfortran que vous utilisez?
En espérant que cela inspire d'autres visiteurs.

Désolé
- W
__________________
Architectures Post-Modernes
wiztricks est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/06/2012, 14h34   #7
squallmrs
Invité régulier
 
Inscription : novembre 2008
Messages : 37
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 37
Points : 8
Points : 8
<xa99222@lx> gfortran -v

Utilisation des specs internes.
Target: x86_64-redhat-linux
Configuré avec: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-libgcj-multifile --enable-languages=c,c++,objc,obj-c++,java,fortran,ada --enable-java-awt=gtk --disable-dssi --enable-plugin --with-java-home=/usr/lib/jvm/java-1.4.2-gcj-1.4.2.0/jre --with-cpu=generic --host=x86_64-redhat-linux
Modèle de thread: posix
version gcc 4.1.1 20070105 (Red Hat 4.1.1-51)

<xa99222@lx> uname -a

Linux lx-teuchos36 2.6.20-1.2948.fc6 #1 SMP Fri Apr 27 19:18:54 EDT 2007 x86_64 x86_64 x86_64 GNU/Linux
squallmrs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2012, 08h48   #8
kango
Membre émérite
 
Homme
Inscription : décembre 2007
Messages : 754
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 34
Localisation : France

Informations professionnelles :
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : décembre 2007
Messages : 754
Points : 953
Points : 953
bonjour,

dans le programme fortran il y a une erreur. open est une instruction, pas une routine.

du coup c'est

et pas

C'est pour ça qu'il y a un undefined symbol à la compilation. f2py n'est pas en cause, ce programme ne se compile pas en Fortran seul (je parle de l'édition des liens bien entendu).
kango est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 18h26.


 
 
 
 
Partenaires

Hébergement Web