os.system ==> ne marche pas - Python - Programmation
Marsh Posté le 15-03-2009 à 20:42:16
ReplyMarsh Posté le 15-03-2009 à 23:26:07
Avec ce génialissime OS qu'est windows, faut pas échapper les '\' quand on rentre des commandes system()?
Marsh Posté le 15-03-2009 à 23:58:28
rien à voir avec windows, \ c'est le caractère d'échappement c'est tout.
Marsh Posté le 16-03-2009 à 00:07:59
Et le séparateur de chemin sous DOS. Donc quand on copie/colle depuis un shell DOS...
Marsh Posté le 16-03-2009 à 00:22:07
Gf4x3443 a écrit : Et le séparateur de chemin sous DOS. Donc quand on copie/colle depuis un shell DOS... |
on utilise des rawstrings
Marsh Posté le 16-03-2009 à 00:23:15
et subprocess
Marsh Posté le 16-03-2009 à 00:31:50
masklinn a écrit : |
et os.sep
Marsh Posté le 16-03-2009 à 00:44:17
Gf4x3443 a écrit : |
os.path.join à la limite, mais pas os.sep directrement
Marsh Posté le 16-03-2009 à 01:40:11
C'est à peu près ce que j'en pense de l'utilisation des raw string en python pour le codage de chemins sous windows.
Elles n'ont jamais été prévues pour cet usage, mais pour les regexp, les détourner à cela, c'est vraiment une balle dans le pied, en plus d'être non portable. Ca me fait un peu penser aux aberrations auxquelles ont mené les magic_quotes de PHP
Marsh Posté le 16-03-2009 à 10:05:08
Oula j'ai peur...
J'ai pas compri un seul des posts de réponse...
toujours est-il que en remplaçant mes \ par des / ça donne ce que je veux. Maintenant je laisse expliquer ce qui savent pourquoi !
Marsh Posté le 16-03-2009 à 10:58:15
Gf4x3443 a écrit : Elles n'ont jamais été prévues pour cet usage, mais pour les regexp |
Bullshit, si ça avait été le cas Python aurait des regexp littérales comme Perl ou Ruby, pas des rawstrings. Les rawstrings ont été prévus pour quelque chose de très clair: empêcher l'interprétation des séquences d'échappement. C'est très utile pour le regexps, mais c'est sûrement pas leur seul domaine d'application.
Gf4x3443 a écrit : en plus d'être non portable. |
On est dans un thread parlant d'un path windows en dur dans le script, je suis pas persuadé que la portabilité soit d'une grande importance.
Marsh Posté le 16-03-2009 à 16:37:06
masklinn a écrit :
|
Bullshit.
Sauf à la fin. Comme implémentation, c'est particulièrement broken alors. Pour des chemins sous windows en tout cas. T'essaieras des "str = r'C:\WIndows\'
Conseiller des raw string literals pour ca, mouarff.
masklinn a écrit :
|
Voir au dessus.
Marsh Posté le 16-03-2009 à 17:04:50
Gf4x3443 a écrit : Bullshit. |
Oui sauf à la fin.
Gf4x3443 a écrit : Comme implémentation, c'est particulièrement broken alors. Pour des chemins sous windows en tout cas. T'essaieras des "str = r'C:\WIndows\' |
r'c:\windows'
Gf4x3443 a écrit : Conseiller des raw string literals pour ca, mouarff. |
Ca fonctionne suffisamment bien pour 99% des scripts "one shot"
Marsh Posté le 16-03-2009 à 18:19:46
masklinn a écrit :
|
On contourne une implémentation broken alors que sémantiquement parlant, c'est strictement identique. On peut pas dire que ca soit une réussite de recommander l'usage d'une raw string pour un path windows.
masklinn a écrit :
|
Bah oui tiens, vu que ca marche dans 99% des cas, acceptons ce genre de bidouilles. Au même titre, on conseillera de ne pas catcher les exceptions ni les erreurs après syscalls, vu que ca marche dans 99% des cas. Désolé, de mon point de vue, c'est un mauvais conseil. J'ai pas lu qu'il était question d'en faire un script "one shot", d'ailleurs.
Edit: Avec la tendance vers le cargo cult programming, c'est vraiment la tunique de nessus ce truc.
Bref, nous ne seront pas d'accord sur ce point là, laissons à ceux qui liront à l'avenir le sujet de juger par eux mêmes. Fin du débat pour moi.
Marsh Posté le 15-03-2009 à 19:33:23
Bonjour,
J'ai un ptit problème : je dois lancer une commande windows à partir d'un script écrit en python. J'ai donc tenté d'utiliser os.system. Mais sans succé.
J'ai droit à une message disant :
the filename, the directory n ame, or volume label syntax is incorrect
la commande en question :
os.system("c:\ABAQUS\Commands\abaqus.bat cae noGUI=c:\Temp\Macro_modele_2_step_statique_metre_temp" )
A savoir, que les noms de répertoire sont correcte, puisque la commande entre les "" renvoi le résultat voulu si elle es entré dans une invite de commande.
Quelqu'un aurait-il une idée ?
Message édité par castorgris le 15-03-2009 à 19:33:53
---------------
Mon Feed-back