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

Python Discussion :

[py2exe] Retrouver d'où l'on vient avant de lancer une ligne de commande


Sujet :

Python

  1. #1
    Membre expérimenté
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    946
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 946
    Points : 1 351
    Points
    1 351
    Par défaut [py2exe] Retrouver d'où l'on vient avant de lancer une ligne de commande
    Salut,

    Etant en train de finaliser un petit outil en ligne de commande, je rencontre quelques difficultés avec la distribution. Imaginons un assembleur en ligne de commande avec un seul paramètre, le nom du fichier a assembler. Si l'assembleur s'appelle asm.exe et le fichier à assembler hello.asm, une fois que le répertoire de l'assembleur est ajouté au PATH, on peut tout à fait se positionner dans le répertoire du projet assembleur à partir du prompt (ici sous Windows, mais le principe semble universel) et taper la commande:

    d:/sources/asm6502/hello> asm hello.asm

    L'assembleur est trouvé dans le PATH et arrive à assembler le fichier source.

    En python, l'assembleur est trouvé et lancé, le chemin vers le fichier source est conservé... Mais si l'assembleur a besoin de fichiers annexes comme un numéro de version ou autre chose, il n'y a pas trace du répertoire de l'assembleur...Ai-je raté quelque chose? Quelqu'un a une idée?

    A+

    Pfeuh

    Code asm.py : 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
     
    import sys
    import os
     
    try:
        with open("version.txt", "r") as fp:
            version = fp.read(-1)
        print "%s version %s"%(sys.argv[0], version)
     
        print "working directory is", os.getcwd()
        print "command line is \"%s\""%" ".join(sys.argv)
     
        if len(sys.argv) > 1:
            with open(sys.argv[1], "r") as fp:
                text = fp.read(-1)
            print text
        else:
            print "an argument is mandatory!"
     
    except Exception as (errmsg):
        print errmsg
     
    raw_input("Hit RETURN")


    Code setup.py : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
     
    import distutils
    import py2exe
    import sys
    import os
    import shutil
     
    DIST_NAME = "dist" # don't change it!
     
    sys.argv = [__file__, "py2exe"]
    print sys.argv
     
    distutils.core.setup(console=["asm.py"], name="asm.exe")
    shutil.copy ("version.txt", os.path.join(DIST_NAME, "version.txt"))

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 277
    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 277
    Points : 36 762
    Points
    36 762
    Par défaut
    Salut,

    Pour sûr que les répertoires changent entre le script Python et l'exécutable construit par Py2exe (ou cx_freeze): il faut jongler en fonction du contexte.
    Avec py2exe, vous avez des informations ici, i.e. dans le wiki.
    Mais je ne suis pas sur d'avoir compris la question.

    - W
    PS: je me suis permis d'indiquer [py2exe] dans l'intitulé de votre message.
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre expérimenté
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    946
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 946
    Points : 1 351
    Points
    1 351
    Par défaut
    Génial! Merci wiztricks, ce qui me manquait, c'était sys.executable que j'ai trouvé dans ton lien. Ça marche très bien dans la distribution, mais pas dans un simple script... Puisque dans ce cas ça pointe sur python.exe! Je propose néanmoins ci dessous une solution.

    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
     
    import sys
    import os
     
    try:
        if sys.argv[0].endswith(".py"):
            # this is a script
            mydir = "./"
        else:
            # this is an executable
            mydir =  os.path.dirname(sys.executable)
     
        with open(os.path.join(mydir, "version.txt"), "r") as fp:
            version = fp.read(-1)
        print "%s version %s"%(sys.argv[0], version)
     
        if len(sys.argv) > 1:
            with open(sys.argv[1], "r") as fp:
                text = fp.read(-1)
            print text
        else:
            print "an argument is mandatory!"
     
    except Exception as (errmsg):
        print "ERROR!"
        print errmsg
     
    raw_input("Hit RETURN")

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Tester si le mobile est "géolocalisable" avant de lancer une fonction
    Par VTwin dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 08/03/2012, 22h59
  2. Allouer de la mémoire avant de lancer une applet
    Par ccedced dans le forum Applets
    Réponses: 11
    Dernier message: 09/05/2008, 13h48
  3. À lire avant de lancer une discussion
    Par Mickael Baron dans le forum Eclipse PHP
    Réponses: 0
    Dernier message: 20/03/2008, 20h52
  4. Marquer une pause avant de lancer une action
    Par PrinceMaster77 dans le forum ASP
    Réponses: 1
    Dernier message: 12/07/2006, 11h50
  5. Retrouver le nom d'un utilisateur qui a verrouillé une ligne
    Par Laurent Dardenne dans le forum Administration
    Réponses: 24
    Dernier message: 18/09/2004, 17h01

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