81 votes

Lancer une commande shell avec un script python, attendre la fin et revenir au script

J'ai un script python qui doit lancer une commande shell pour chaque fichier dans un DIR :

import os

files = os.listdir(".")
for f in files:
    os.execlp("myscript", "myscript", f)

Cela fonctionne bien pour le premier fichier, mais une fois la commande "myscript" terminée, l'exécution s'arrête et ne revient pas au script python.

Comment je peux faire ça ? Dois-je fork() avant calling os.execlp() ?

126voto

user39307 Points 584

sous-processus : Le module subprocess vous permet de générer de nouveaux processus, de vous connecter à leurs canaux d'entrée/sortie/erreur et d'obtenir leurs codes de retour.

http://docs.python.org/library/subprocess.html

Utilisation :

import subprocess
process = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE)
process.wait()
print process.returncode

66voto

Harley Holcombe Points 34618

Vous pouvez utiliser subprocess.Popen. Il y a plusieurs façons de le faire :

import subprocess
cmd = ['/run/myscript', '--arg', 'value']
p = subprocess.Popen(cmd, stdout=subprocess.PIPE)
for line in p.stdout:
    print line
p.wait()
print p.returncode

Ou, si vous vous fichez de ce que le programme externe fait réellement :

cmd = ['/run/myscript', '--arg', 'value']
subprocess.Popen(cmd).wait()

3voto

M. Utku ALTINKAYA Points 1549

utiliser le frai

import os
os.spawnlp(os.P_WAIT, 'cp', 'cp', 'index.html', '/dev/null')

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X