IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Interfaçage autre langage Python Discussion :

[PYTHON/FORTRAN ( f2py )] Lecture ecriture de fichier


Sujet :

Interfaçage autre langage Python

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 38
    Points : 33
    Points
    33
    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
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 235
    Points : 36 684
    Points
    36 684
    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.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 38
    Points : 33
    Points
    33
    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
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 235
    Points : 36 684
    Points
    36 684
    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.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 38
    Points : 33
    Points
    33
    Par défaut
    Voici ma fonction TOTO.F le module créé se nomme Transf:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    f2py -c $FFILE_LIST -m Transf --fcompiler=gnu95
    voici le code python :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 235
    Points : 36 684
    Points
    36 684
    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.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 38
    Points : 33
    Points
    33
    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 éprouvé
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

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

    Informations forums :
    Inscription : Décembre 2007
    Messages : 758
    Points : 970
    Points
    970
    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).

Discussions similaires

  1. Lecture/Ecriture de fichiers MAT via .NET
    Par mimic50 dans le forum MATLAB
    Réponses: 3
    Dernier message: 29/03/2007, 12h48
  2. Réponses: 1
    Dernier message: 21/12/2006, 14h06
  3. lecture/ecriture de fichier à distance avec indentification
    Par Mat1664 dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 22/05/2006, 18h16
  4. Réponses: 4
    Dernier message: 03/02/2006, 14h50
  5. lecture-ecriture de fichier en mode Random (Get - Put)
    Par MuShRo_Om dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 15/01/2006, 15h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo