GNT sans publicité, site mobile, fonctionnalitées exclusives...

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
Lire les 11 réponses

Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 3
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Eric Jacoboni
Le #434979
Titouille

J'ai essayé de passer les chemins entre guillemets, mais le problème reste.


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

Titouille
Le #434977

Titouille

J'ai essayé de passer les chemins entre guillemets, mais le problème reste.



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



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


Eric Jacoboni
Le #434975
Titouille
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

Vincent Bernat
Le #434974
OoO En ce début d'après-midi ensoleillé du mercredi 22 juin 2005, vers
15:43, Titouille
Bon, j'ai fait mon application sur un chemin sans espace
(e:projectspythonmyprojectbuild, 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...


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

Titouille
Le #434972
OoO En ce début d'après-midi ensoleillé du mercredi 22 juin 2005, vers
15:43, Titouille

Bon, j'ai fait mon application sur un chemin sans espace
(e:projectspythonmyprojectbuild, 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...



Entoure tous les chemins potentiels d'une paire de guillemets.



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


Publicité
Suivre les réponses
Poster une réponse
Anonyme