32

How can one make the python script wait until some process launched with os.system() call is completed? For example, code like

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

This launches the requested process n times simultaneously.

mkrieger1
  • 19,194
  • 5
  • 54
  • 65
Grigor Gevorgyan
  • 6,753
  • 4
  • 35
  • 64

2 Answers2

30

os.system() does wait for its process to complete before returning.

If you are seeing it not wait, the process you are launching is likely detaching itself to run in the background in which case the subprocess.Popen + wait example Dor gave won't help.

Side note: If all you want is subprocess.Popen + wait use subprocess.call:

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

That is really no different than os.system() other than explicitly passing the command and arguments in instead of handing it over as a single string.

gps
  • 1,360
  • 12
  • 12
28

Use subprocess instead:

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

Read more here: http://docs.python.org/library/subprocess.html

dorsh
  • 23,750
  • 2
  • 27
  • 29
  • 1. this leaks the pipe handle, `p` must be `close()`d. Use `with subprocess.Popen(('command', str(i)) as p: p.wait()` instead. 2. If you don't read the pipe, and the process outputs a lot to stdout, the pipe clogs, and you get deadlocked. – kkm inactive - support strike Mar 16 '23 at 22:43