Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1426 connectés 

  FORUM HardWare.fr
  Programmation
  Python

  Utiliser os.system() et os.path

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Utiliser os.system() et os.path

n°1804705
Shadew
Posté le 26-10-2008 à 14:19:56  profilanswer
 

Kikoo,
 
J'ai réussi à faire ce que je voulais mais je pense qu'il y a moyen de faire plus proprement. Voici ma méthode pour exécuter un script python se trouvant dans le fichier c:\Python25\xml:

Code :
  1. os.system(os.path.join(os.getcwd(),'xml\\xmlTopic.py'))


Si je met ce même script dans c:\Python25 et que je fais

Code :
  1. os.system('xmlTopic.py')


ça marche aussi. Je supposais que c'est dû au fait que le répertoire c:\Python25 se trouve dans la variable sys.path, j'ai donc essayé ce code-ci:

Code :
  1. sys.path.append(os.path.join(os.getcwd(),'xml'))
  2. os.system('xmlTopic.py')


qui ajoute dans un premier le fichier c:\Python25\xml à la variable sys.path. Mais l'appel os.system() me renvoie "'xmlTopic.py' is not recognized as an internal or external command,
operable program or batch file."
 
Est-il possible de jouer avec la variable sys.path ou doit-on faire comme je fais?
 
Merci!!

mood
Publicité
Posté le 26-10-2008 à 14:19:56  profilanswer
 

n°1804706
KangOl
Profil : pointeur
Posté le 26-10-2008 à 14:53:02  profilanswer
 

tu essayes de faire quoi là ? :heink:


---------------
Nos estans firs di nosse pitite patreye...
n°1804714
Shadew
Posté le 26-10-2008 à 15:51:29  profilanswer
 

J'essaie d'exécuter le script xmlTopic.py se trouvant dans le dossier c:\Python25\xml depuis le dossier c:\Python25.

Code :
  1. os.system(os.path.join(os.getcwd(),'xml\\xmlTopic.py'))


Là je crée donc le chemin jusqu'au fichier c:\Python25\xml\xmlTopic.py et je l'exécute avec l'os.system().
 
Mais j'aimerais faire en sorte de pouvoir importer ou exécuter des fichiers sans devoir passer le chemin absolu, en utilisant donc sys.path mais ça n'a pas l'air de fonctionner.

n°1804717
Shadew
Posté le 26-10-2008 à 16:10:30  profilanswer
 

Je viens de tester un truc qui marche aussi:
 

Code :
  1. os.system('xml\\xmlTopic.py')


 
Mais le but ce serait de faire carrément:
 

Code :
  1. os.system('xmlTopic.py')


 
Sans que cela bug.

n°1804720
masklinn
í dag viðrar vel til loftárása
Posté le 26-10-2008 à 16:13:22  profilanswer
 

[:prozac]  [:prozac]  [:prozac]  [:prozac]  [:prozac]

 

edit: sys.path n'a aucun rapport avec le PATH windows, faudrait peut-être lire la doc de temps en temps, c'est le path d'import des modules Python [:pingouino]

 

Et ya quoi dans ton xmlTopic.py, pourquoi il est dans c:\Python25 alors qu'il n'a rien à y foutre, et pourquoi tu veux le lancer en shell plutôt que l'importer [:petrus dei]


Message édité par masklinn le 26-10-2008 à 16:15:12

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1804741
Shadew
Posté le 26-10-2008 à 18:00:18  profilanswer
 

Au départ, j'avais fait un parallèle entre les modules python et les script python (je veux dire, je pensais que le path menait tant aux modules à importer qu'à des fichiers à ouvrir ou à des scripts à lancer). J'ai lu la doc mais elle est pas super précise (elle parle que des modules, mais ne mentionne pas de restriction au sujet des autres élément mentionnées ci-dessus).
 
Sinon, les élément se trouvent pour le moment dans Python25 car ils sont encore en phase de test (après ils seront déplacés à gogo) et que le Python25 est facilement atteignable avec la console.
 
En réalité, j'ai 6-7 scripts et je les lance depuis un script lanceur. Ainsi, un utilisateur lance le script lanceur et tous les script suivent.
 
J'ai par contre essayer d'importer des fichier python contenant des fonction et des classes en ajoutant le chemin du dossier contenant ces fichiers dans le sys.path mais ça ne marche pas non plus. Il me fait 'ImportError: No module named exprReg'. Voici le code:

Code :
  1. sys.path.append(os.path.join(os.getcwd().rpartition('\\')[0],'lib'))
  2. from exprReg import ExprReg
  3. from eltSpec import EltSpec
  4. from xmlFct import extDonnees


 
Le append ajoute bien le fichier lib dans lequel sont contenus les modules. Si met tous les fichiers dans le même dossier, les commandes import fonctionnent bien.

Message cité 1 fois
Message édité par Shadew le 26-10-2008 à 18:09:06
n°1804765
masklinn
í dag viðrar vel til loftárása
Posté le 26-10-2008 à 19:39:15  profilanswer
 

Shadew a écrit :

Au départ, j'avais fait un parallèle entre les modules python et les script python (je veux dire, je pensais que le path menait tant aux modules à importer qu'à des fichiers à ouvrir ou à des scripts à lancer). J'ai lu la doc mais elle est pas super précise (elle parle que des modules, mais ne mentionne pas de restriction au sujet des autres élément mentionnées ci-dessus).
 
Sinon, les élément se trouvent pour le moment dans Python25 car ils sont encore en phase de test (après ils seront déplacés à gogo) et que le Python25 est facilement atteignable avec la console.
 
En réalité, j'ai 6-7 scripts et je les lance depuis un script lanceur. Ainsi, un utilisateur lance le script lanceur et tous les script suivent.
 
J'ai par contre essayer d'importer des fichier python contenant des fonction et des classes en ajoutant le chemin du dossier contenant ces fichiers dans le sys.path mais ça ne marche pas non plus. Il me fait 'ImportError: No module named exprReg'. Voici le code:

Code :
  1. sys.path.append(os.path.join(os.getcwd().rpartition('\\')[0],'lib'))
  2. from exprReg import ExprReg
  3. from eltSpec import EltSpec
  4. from xmlFct import extDonnees


 
Le append ajoute bien le fichier lib dans lequel sont contenus les modules. Si met tous les fichiers dans le même dossier, les commandes import fonctionnent bien.


Mais qu'est-ce que c'est que cette horreur [:mlc]
 
La première règle de sys.path, c'est qu'on ne touche jamais à sys.path.
 
Ensuite, prière de poster ton arbo de modules parce que là tu colles des bouts de code sans qu'il soit possible de savoir de quoi tu parles (et dégages le tout de python25, ça n'a rien à y faire)


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1804859
Shadew
Posté le 27-10-2008 à 08:36:38  profilanswer
 

J'avais trouvé sur le net qu'il fallait bidouiller sys.path pour inclure des modules, c'est pour ça que j'ai fait un append.
 
Voici l'arbo:
C:\Python25\Extracteurv2\xml\config : contient les script genre xmlTopic.py qui doivent appeler les modules
C:\Python25\Extracteurv2\xml\lib : contient les modules genre ExprReg.

n°1804899
masklinn
í dag viðrar vel til loftárása
Posté le 27-10-2008 à 10:54:12  profilanswer
 

Shadew a écrit :

J'avais trouvé sur le net qu'il fallait bidouiller sys.path pour inclure des modules, c'est pour ça que j'ai fait un append.
 
Voici l'arbo:
C:\Python25\Extracteurv2\xml\config : contient les script genre xmlTopic.py qui doivent appeler les modules
C:\Python25\Extracteurv2\xml\lib : contient les modules genre ExprReg.


$ mkdir xml
$ cd xml
$ mkdir config
$ mkdir lib
$ touch __init__.py
$ touch config/__init__.py
$ touch lib/__init__.py
$ cat > config/xmltopic.py
def run():
        print "Running xmltopic"
 
if __name__ == "__main__":
        run()
^C
$ cat > config/xmlmodule.py
from xml.lib.exprreg import ExprReg
 
def run():
        print ExprReg()
 
if __name__ == "__main__":
        run()
^C
$ cat > lib/exprreg.py
class ExprReg(object):
        def __str__(self):
                return "ExprReg object"
^C
$ cd ..
$ cat > app.py
#!/usr/bin/env python
 
from xml.config import xmltopic, xmlmodule
 
xmltopic.run()
xmlmodule.run()
^C
$ python app.py
Running xmltopic
ExprReg object
$ tree /F /A .
EXTRACTEURV2
|   app.py
|
\---xml
    |   __init__.py
    |
    +---config
    |       xmlmodule.py
    |       xmltopic.py
    |       __init__.py
    |
    \---lib
            exprreg.py
            __init__.py


[:spamafote]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1805041
Shadew
Posté le 27-10-2008 à 16:34:05  profilanswer
 

Merci!! Donc en fait il suffit de rajouter des fichiers __init__.py pour pouvoir importer des modules. Et comment faire pour importer le module se trouvant dans lib depuis le script se trouvant dans config? Il faudrait réussir à revenir en arrière d'un fichier et puis importer lib. C'est possible ou bien il faut s'arranger que les fichiers respecte ton arborescence?

Message cité 1 fois
Message édité par Shadew le 27-10-2008 à 16:34:19
mood
Publicité
Posté le 27-10-2008 à 16:34:05  profilanswer
 

n°1805044
masklinn
í dag viðrar vel til loftárása
Posté le 27-10-2008 à 16:41:42  profilanswer
 

Shadew a écrit :

Merci!! Donc en fait il suffit de rajouter des fichiers __init__.py pour pouvoir importer des modules.


Plus précisément, le fichier __init__.py transforme le répertoire dans lequel il est contenu en module python. Qui peut contenir des sous-modules si besoin.

Shadew a écrit :

Et comment faire pour importer le module se trouvant dans lib depuis le script se trouvant dans config? Il faudrait réussir à revenir en arrière d'un fichier et puis importer lib.


C'est possible à partir de Python 2.6 (ou 2.5 en important depuis __future__) en utilisant les Absolute/Relative imports, mais sans ça il faut faire référence à la racine de l'arbo, il n'est (à ma connaissance) pas possible de "remonter". C'est pourquoi dans xml.config.xmlmodule j'importe xml.lib.exprreg (le chemin d'import à partir de app, donc)


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1805049
Shadew
Posté le 27-10-2008 à 16:48:17  profilanswer
 

oki merci pour tout !!


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Python

  Utiliser os.system() et os.path

 

Sujets relatifs
forcer le rechargement de la page (pas utiliser le cache)Utiliser Enterprise Library avec Oracle Stored Procedure
utiliser dans une methode toString() celle d'une autre classeUtiliser les lignes d’un tableau JS
TOMCAT en PHP - Utiliser sockets en multi-connexions[VB .NET] Comment utiliser une classe écrite en C#
utiliser des accents dans les noms de variables ?Quel CMS utiliser??
Utiliser json_decode() en PHP 4 
Plus de sujets relatifs à : Utiliser os.system() et os.path


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR