Je voudrais m'étendre sur la solution Windows. En utilisant IDLE avec Python 2.7.5, lorsque j'exécute ce code à partir du fichier Expts.py :
import subprocess
r = subprocess.check_output('cmd.exe dir',shell=False)
print r
...dans le shell Python, je n'obtiens QUE la sortie correspondant à "cmd.exe" ; la partie "dir" est ignorée. CEPENDANT, lorsque j'ajoute un commutateur tel que /K ou /C ...
import subprocess
r = subprocess.check_output('cmd.exe /K dir',shell=False)
print r
...puis dans le shell Python, j'obtiens tout ce que j'attends, y compris la liste des répertoires. Woohoo !
Maintenant, si j'essaie de faire ces mêmes choses dans la fenêtre de commande DOS Python, sans le commutateur, ou avec le commutateur /K, la fenêtre semble se bloquer parce qu'elle exécute un sous-processus cmd.exe et qu'elle attend d'autres entrées - tapez 'exit' puis appuyez sur [enter] pour sortir. Mais avec le commutateur /K, cela fonctionne parfaitement et vous ramène à l'invite python. Très bien alors.
Je suis allé un peu plus loin... Je pensais que c'était cool... Quand je fais plutôt cela dans Expts.py :
import subprocess
r = subprocess.call("cmd.exe dir",shell=False)
print r
...une nouvelle fenêtre DOS s'ouvre et reste là, affichant uniquement les résultats de "cmd.exe" et non de "dir". Lorsque j'ajoute le commutateur /C, la fenêtre DOS s'ouvre et se ferme très rapidement avant que je puisse voir quoi que ce soit (comme prévu, car /C se termine une fois terminé). Lorsque j'ajoute à la place le commutateur /K, la fenêtre DOS s'ouvre et reste, ET j'obtiens tous les résultats que j'attends, y compris la liste des répertoires.
Si j'essaie la même chose (subprocess.call au lieu de subprocess.check_output) à partir d'une fenêtre de commande DOS Python, toute la sortie se fait dans la même fenêtre, il n'y a pas de fenêtres popup. Sans le commutateur, la partie "dir" est à nouveau ignorée, ET l'invite passe de l'invite python à l'invite DOS (puisqu'un sous-processus cmd.exe est exécuté en python ; tapez à nouveau 'exit' et vous reviendrez à l'invite python). L'ajout de l'option /K permet d'imprimer la liste des répertoires et de faire passer l'invite de python à DOS, puisque /K ne met pas fin au sous-processus. En remplaçant le commutateur par /C, on obtient tous les résultats attendus ET on revient à l'invite python puisque le sous-processus se termine conformément à /C.
Désolé pour cette longue réponse, mais je suis frustré sur ce forum par les nombreuses "réponses" laconiques qui, au mieux, ne fonctionnent pas (apparemment parce qu'elles n'ont pas été testées - comme la réponse d'Eduard F au-dessus de la mienne, où il manque le commutateur) ou pire, sont si laconiques qu'elles n'aident pas beaucoup (par exemple, "essayez le sous-processus au lieu de os.system" ... ouais, OK, et maintenant ? ?). En revanche, j'ai fourni des solutions que j'ai testées, et montré comment il existe des différences subtiles entre elles. Cela a pris beaucoup de temps mais... J'espère que cela vous aidera.