J'écris un petit script pour parcourir en série un répertoire et exécuter une commande sur les sous-répertoires qu'il contient.
Je rencontre cependant un problème avec Popen () qu'il parcourra les répertoires et exécutera la commande souhaitée sans attendre la fin du précédent. c'est à dire.
for dir in dirs:
#run command on the directory here.
il lance la commande pour chaque dir sans s'en soucier par la suite. Je veux qu'il attende que l'actuel se termine, puis démarre le suivant. L'outil que j'utilise sur les répertoires est Log2timeline
de SANS SIFT qui prend un certain temps et produit pas mal de sortie. Je me fiche de la sortie, je veux juste que le programme attende avant de lancer la suivante.
Quelle est la meilleure façon d'y parvenir?
Je vous remercie!
Utilisez Popen.wait :
process = subprocess.Popen(["your_cmd"]...)
process.wait()
Ou check_output , check_call qui attendent tous le code retour en fonction de ce que vous voulez faire et de la version de python.
Si vous utilisez python> = 2.7 et que vous ne vous souciez pas de la sortie, utilisez simplement check_call
.
Vous pouvez également utiliser call mais cela ne générera aucune erreur si vous avez un code retour différent de zéro qui peut être souhaitable ou non.
subprocess.check_output( ... )
va bloquer ... et peut être utilisé à la place de Popen
cependant, si vous êtes réglé sur Popen
subprocess.Popen(...).communicate()
bloquera également jusqu'à ce que le processus revienne