Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 8 sur 8
  1. #1
    Invité régulier
    Inscrit en
    novembre 2008
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : novembre 2008
    Messages : 38
    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 ?

  2. #2
    Modérateur

    Homme Profil pro
    Architecte technique
    Inscrit en
    juin 2008
    Messages
    5 238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 5 238
    Points : 7 251
    Points
    7 251

    Par défaut

    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

  3. #3
    Invité régulier
    Inscrit en
    novembre 2008
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : novembre 2008
    Messages : 38
    Points : 8
    Points
    8

    Par défaut

    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 ...

  4. #4
    Modérateur

    Homme Profil pro
    Architecte technique
    Inscrit en
    juin 2008
    Messages
    5 238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 5 238
    Points : 7 251
    Points
    7 251

    Par défaut

    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

  5. #5
    Invité régulier
    Inscrit en
    novembre 2008
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : novembre 2008
    Messages : 38
    Points : 8
    Points
    8

    Par défaut

    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...

  6. #6
    Modérateur

    Homme Profil pro
    Architecte technique
    Inscrit en
    juin 2008
    Messages
    5 238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 5 238
    Points : 7 251
    Points
    7 251

    Par défaut

    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

  7. #7
    Invité régulier
    Inscrit en
    novembre 2008
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : novembre 2008
    Messages : 38
    Points : 8
    Points
    8

    Par défaut

    <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

  8. #8
    Membre émérite
    Homme Profil pro
    Inscrit en
    décembre 2007
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

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

    Informations forums :
    Inscription : décembre 2007
    Messages : 754
    Points : 887
    Points
    887

    Par défaut

    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).

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •