J'ai un script Python qui doit exécuter un programme externe, mais qui échoue pour une raison quelconque.
Si j'ai le script suivant :
import os;
os.system("C:\\Temp\\a b c\\Notepad.exe");
raw_input();
Alors il échoue avec l'erreur suivante :
'C:\Temp\a' ; n'est pas reconnu comme une commande interne ou externe, un programme exploitable ou un fichier batch.
Si j'échappe le programme avec des guillemets :
import os;
os.system('"C:\\Temp\\a b c\\Notepad.exe"');
raw_input();
Alors ça marche. Cependant, si j'ajoute un paramètre, il cesse à nouveau de fonctionner :
import os;
os.system('"C:\\Temp\\a b c\\Notepad.exe" "C:\\test.txt"');
raw_input();
Quelle est la bonne façon d'exécuter un programme et d'attendre qu'il se termine ? Je n'ai pas besoin d'en lire la sortie, car il s'agit d'un programme visuel qui effectue un travail et se termine ensuite, mais je dois attendre qu'il se termine.
Notez également que le déplacement du programme vers un chemin non espacé n'est pas non plus une option.
Cela ne fonctionne pas non plus :
import os;
os.system("'C:\\Temp\\a b c\\Notepad.exe'");
raw_input();
Notez la permutation des guillemets simples et doubles.
Avec ou sans paramètre au Bloc-notes ici, il échoue avec le message d'erreur
La syntaxe du nom de fichier, du nom de répertoire ou de l'étiquette de volume est incorrecte.
[subprocess.call
][1] évitera les problèmes liés aux conventions de citation des différents shells. Il accepte une liste, plutôt qu'une chaîne de caractères, ainsi les arguments sont plus facilement délimités. i.e.
import subprocess
subprocess.call(['C:\\Temp\\a b c\\Notepad.exe', 'C:\\test.txt'])
[1] : http://docs.python.org/2/library/subprocess.html#using-the-subprocess-module
Voici une autre façon de procéder.
Si vous utilisez Windows, ce qui suit agit comme un double-clic sur le fichier dans l'Explorateur, ou comme un argument à la commande DOS "start" : le fichier est ouvert avec l'application (s'il y en a une) à laquelle son extension est associée.
filepath = 'textfile.txt'
import os
os.startfile(filepath)
Exemple :
import os
os.startfile('textfile.txt')
Cela ouvrira textfile.txt avec Notepad si Notepad est associé aux fichiers .txt.
Je pense que c’est le même problème que lorsque vous utilisez des raccourcis dans Windows... Essayez ceci :
import os;
os.system("\"C:\\Temp\\a b c\\Notepad.exe\" C:\\test.txt");