benz <[EMAIL PROTECTED]> wrote:
   ...
> def spin(delay):
> 
>   pattern=['-','\\','|','/','-','\\','|']
> 
>   while 1:
>     for i in pattern:
>       sys.stdout.write(i + " ")
>       sys.stdout.flush()
>       sys.stdout.write("\b\b")
>       time.sleep(delay)
> 
> pid = os.fork()
> 
> if pid == 0:
>   os.execvp("du",("du","-shc","/"))
> else:
>   spin(0.05)
> 
> 
> However, the spinner is kept spinning even the child process was ended.

It would be astonishing if it were otherwise!  The loop in function spin
is deliberately coded to NEVER terminate, so of course it never does.

> Any idea ? Thanks!

Have the spin function accept the pid argument and exit the loop if said
pid has terminated; to check the latter, e.g., os.kill(pid, 0) -- this
will raise an OSError if no process with that pid exists, so you can use
a try/except OSError: to catch that and break as appropriate.


Alex
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to