os.system et les espaces dans les chemins
Le
Titouille
Bonjour à tous !!!
Je rencontre un problème avec la commande os.system, et je ne sais
comment la résoudre
Tout d'abord, le cadre :
création d'une appli pour windows, avec wxpython (intégration Flash)
J'ai besoin d'une commande me permettant d'ouvrir un répertoire sur le
disque : os.system( 'explorer.exe ' + path )
J'ai besoin d'une commande me permettant de lancer un exécutable sur le
disque : os.system( path + "monExecutable.exe" )
Enfin, j'ai besoin d'une commande me permettant de lancer un exécutable
en lui passant des paramètres : os.system( pathExe + "myExe execute "
+inputFile + " " + outputFile );
Bon, j'ai fait mon application sur un chemin sans espace
(e:\projects\python\myproject\build\, ayant l'habitude de le faire de
cette manière. Et bien sur, lorsque mon client l'a testée, il a placé ça
sur le bureau, donc "/Documents and Settings/", un chemin contenant des
espaces.
Et là, tout est foireux Les commandes python fonctionnent très bien
(genre copyFile ou copyTree) mais os.system me fait des misères en me
spécifiant que 'c:\Documents' n'est pas reconnu en tant que commande
interne ou externe valide, blablabla
J'ai essayé de passer les chemins entre guillemets, mais le problème reste.
Est-ce qu'il existe une solution pour continuer à utiliser os.system ?
ou alors une ou plusieurs autres commandes qui me permettent de faire
les mêmes actions sans être confronté à ce genre de problèmes ??
D'avance merci pour les suggestions :)
a++
Thierry
Je rencontre un problème avec la commande os.system, et je ne sais
comment la résoudre
Tout d'abord, le cadre :
création d'une appli pour windows, avec wxpython (intégration Flash)
J'ai besoin d'une commande me permettant d'ouvrir un répertoire sur le
disque : os.system( 'explorer.exe ' + path )
J'ai besoin d'une commande me permettant de lancer un exécutable sur le
disque : os.system( path + "monExecutable.exe" )
Enfin, j'ai besoin d'une commande me permettant de lancer un exécutable
en lui passant des paramètres : os.system( pathExe + "myExe execute "
+inputFile + " " + outputFile );
Bon, j'ai fait mon application sur un chemin sans espace
(e:\projects\python\myproject\build\, ayant l'habitude de le faire de
cette manière. Et bien sur, lorsque mon client l'a testée, il a placé ça
sur le bureau, donc "/Documents and Settings/", un chemin contenant des
espaces.
Et là, tout est foireux Les commandes python fonctionnent très bien
(genre copyFile ou copyTree) mais os.system me fait des misères en me
spécifiant que 'c:\Documents' n'est pas reconnu en tant que commande
interne ou externe valide, blablabla
J'ai essayé de passer les chemins entre guillemets, mais le problème reste.
Est-ce qu'il existe une solution pour continuer à utiliser os.system ?
ou alors une ou plusieurs autres commandes qui me permettent de faire
les mêmes actions sans être confronté à ce genre de problèmes ??
D'avance merci pour les suggestions :)
a++
Thierry

Poser une question

Tu as essayé avec le module os.path ?
% cat bla.py
import os.path
print os.path.dirname('Document And Settings/bla.txt')
print os.path.basename('Document And Settings/bla.txt')
% python bla.py
Document And Settings
bla.txt
--
Éric Jacoboni, né il y a 1422892377 secondes
Hello !!
Oui, chaque chemin est créé avec os.path d'abord, donc ce n'est pas un
problème de chemin, car comme je l'ai dit, toutes les interactions
python fonctionnent, même avec des chemins contenant des espaces...
C'est juste la commande os.system qui est foireuse...
C'est pas dit. os.system, comme son nom l'indique, ne fait que
transmettre la commande au système sous-jacent.
Tu as vérifié que ton système (Windows, j'imagine) acceptait la ligne
de commande telle que tu la passes à os.system ?
Je ne peux pas t'aider plus que ça... je n'utilise pas Windows.
--
Éric Jacoboni, né il y a 1422896923 secondes
15:43, Titouille
Entoure tous les chemins potentiels d'une paire de guillemets.
--
panic ("No CPUs found. System halted.n");
2.4.3 linux/arch/parisc/kernel/setup.c
Je reprend ici, mais je répond également à Eric par la même occasion.
Voilà ce que j'ai à la base :
# get pathes for swfmill generation
appPath = os.getcwd();
swfmillPath = self.getPathFromString( appPath + ";tools;swfmill.exe" );
shareLibPath = self.getPathFromString( projectPath +
";dist;content;__sharedLibrary.swf" );
# launch swfmill
s = swfmillPath + ' simple ' + xmlPath + ' ' + shareLibPath;
os.system( s )
la méthode getPathFromString fait un split sur la chaine passée et
concatène chaque élément avec l'élément résultant via os.path.join
Je sais que la commande standard passe avec os.system, puisque sans
avoir d'espace dans le chemin, ça s'exécute normalement.
les chemins :
swfmillPath : E:ProjectsPythonmyProjectbuildbuild001toolsswfmill.exe
xmlPath :
E:ProjectsPythonmyProjectbuildbuild001projectstestbuildmyFile.xml
shareLibPath :
E:ProjectsPythonmyProjectbuildbuild001projectstestmydistsharedLib.swf
Imaginons maintenant que le chemin est modifié, et contient un espace :
E:ProjectsPythonmy Project à la place de E:ProjectsPythonmyProject
J'ai tenté d'entourer les chemins sensibles avec des guillemets, du genre :
s = '"' + swfmillPath + '" simple "' + xmlPath + '" "' + shareLibPath +
'"';
car je sais que c'est important sur les commandes windows, mais ça ne
change rien, il continue à planter sur l'espace... peut-être que je m'y
prend mal ??
En tout cas, merci d'essayer de m'aider :)
Cordialement
Thierry