web-dev-qa-db-fra.com

Python: en attente de la fin du processus lancé externe

La question déjà dans le titre - comment faire attendre le script python jusqu'à ce qu'un processus lancé avec l'appel os.system () soit terminé? Par exemple, un code comme

    for i in range( 0, n ):
       os.system( 'someprog.exe %d' % i )

Cela lance le processus demandé n fois simultanément, ce qui peut faire transpirer un peu mon ordinateur)

Merci pour tout conseil.

22
Grigor Gevorgyan

os.system () does attend que son processus se termine avant de revenir.

Si vous ne voyez pas attendre, le processus que vous lancez se détache probablement pour s'exécuter en arrière-plan, auquel cas l'exemple de sous-processus.Popen + wait que Dor a donné n'aidera pas.

Note latérale: Si tout ce que vous voulez, c'est sous-processus. Ouvrir + attendre utiliser subprocess.call:

import subprocess
subprocess.call(('someprog.exe', str(i)))

Ce n'est vraiment pas différent de os.system () autre que de passer explicitement la commande et les arguments au lieu de les remettre comme une seule chaîne.

18
gps

Utilisez à la place subprocess:

import subprocess
for i in xrange(n):
  p = subprocess.Popen(('someprog.exe', str(i))
  p.wait()

En savoir plus ici: http://docs.python.org/library/subprocess.html

21
Dor Shemer