[Tutor] os.waitpid non spawned pid

Martin Walsh mwalsh at groktech.org
Sat Jun 21 05:22:14 CEST 2008


John [H2O] wrote:
> Hello, I would like to write a script that would have a command line option
> of a pid# (known ahead of time). Then I want my script to wait to execute
> until the pid is finished. How do I accomplish this?
> 
> I tried the following:
> #!/usr/bin/env python
> 
> import os
> import sys
> 
> def run_cmd(cmd):
>    """RUN A BASH CMD"""
>    import subprocess as sub
>    p = sub.Popen( ['/bin/bash' , '-c' , cmd ],
>                  stdout = sub.PIPE , stderr = sub.STDOUT )
>    output = p.stdout.read()
>    return output
> 
> r=os.waitpid(sys.argv[1],0);

To approximate the behavior you're looking for, I've seen it suggested
that you can send signal number 0 to a non-child process until you get a
meaningful result. Never used this approach myself, but it might look
something like this:

import os, time
def waitncpid(pid):
    while 1:
        try:
            os.kill(pid, 0)
            time.sleep(1)
        except OSError:
            break

waitncpid(sys.argv[1])

Not sure what this would do on a windows machine. And, I suppose it is
possible that your process could end, and another start with the same
pid while sleeping between kill attempts, but this seems unlikely to me,
YMMV.

> 
> cmd = 'echo "Now %s has finished " ' %r
> 
> run_cmd(cmd)

HTH,
Marty


More information about the Tutor mailing list